Laden...

Eigener ListView: Problem beim Zeichnen, wenn Fokus Rechteck darüber

Erstellt von sbertl000 vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.202 Views
sbertl000 Themenstarter:in
822 Beiträge seit 2005
vor 16 Jahren
Eigener ListView: Problem beim Zeichnen, wenn Fokus Rechteck darüber

Hy

Ich habe einen eigenen ListView, das oben genannte Problem tritt auf. Siehe Bild:

Mein Code:


private void ListViewEx_DrawItem(object sender, DrawListViewItemEventArgs e)
        {
            e.Graphics.Clip = new Region(e.Item.Bounds);

            if (this.View != View.Details)
                drawOffset = 0;

            if (e.Item.Checked)
            {
                RectangleF bounds = new RectangleF(e.Item.Bounds.X + drawOffset, e.Item.Bounds.Y,
                            e.Item.Bounds.Width - drawOffset, e.Item.Bounds.Height);

                //we don't draw the whole rectangle, we draw with 1px offset from each edge
                bounds = new RectangleF(bounds.X + 1, bounds.Y + 1, bounds.Width - 2, bounds.Height - 2);

                switch (drawMode)
                {
                    case ItemDrawMode.FillSolid:

                        e.Graphics.FillRectangle(new SolidBrush(backColorChecked), bounds);

                        break;
                    case ItemDrawMode.FillLinearGradientVertical:

                        lgBrush = new LinearGradientBrush(bounds, backColorChecked, BackColor, LinearGradientMode.Vertical);
                        e.Graphics.FillRectangle(lgBrush, bounds);

                        break;
                }
            }
            else
                e.Graphics.FillRectangle(new SolidBrush(BackColor), e.Item.Bounds);

            if ((e.State & ListViewItemStates.Selected) != 0)
            {
                RectangleF bounds = new RectangleF(e.Item.Bounds.X + drawOffset, e.Item.Bounds.Y,
                            e.Item.Bounds.Width - drawOffset, e.Item.Bounds.Height);

                //we don't draw the whole rectangle, we draw with 1px offset from each edge
                bounds = new RectangleF(bounds.X + 1, bounds.Y + 1, bounds.Width - 2, bounds.Height - 2);

                switch (drawMode)
                {
                    case ItemDrawMode.FillSolid:

                        e.Graphics.FillRectangle(new SolidBrush(backColorSelected), bounds);

                        break;

                    case ItemDrawMode.FillLinearGradientVertical:

                        lgBrush = new LinearGradientBrush(bounds, backColorSelected, BackColor, LinearGradientMode.Vertical);

                        e.Graphics.FillRectangle(lgBrush, bounds);
                        break;
                }
            }

            if (this.View != View.Details)
            {
                e.DrawText();
            }
        }
49.485 Beiträge seit 2005
vor 16 Jahren

Hallo sbertl000,

also ich sehe aus dem Bild nicht, was falsch ist und wie es richtig sein sollte. Kannst du einen IST-SOLL-Screenshot machen oder es zumindest genauer beschreiben?

herbivore

sbertl000 Themenstarter:in
822 Beiträge seit 2005
vor 16 Jahren

Also in der zweiten Zeile links auf der Oberseite siehst du eine Kante, dort wo der Verlauf beginnt.

sbertl