BeginUpdate und UserPaint
-
Ich habe eine Liste die ich mit UserPaint selber zeichne,die funktioniert soweit (ausser das die Gruppenüberschriften beim Scrollen nicht upgedated werden).Aber wenn ich BeginUpdate benutze kriege ich einen Überlauffehler beim zeichen der Subitems.
protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e) { Font item_font = e.SubItem.Font; Brush item_brush = new SolidBrush(e.SubItem.ForeColor); Brush item_bg = new SolidBrush(e.SubItem.BackColor); if (BackgroundImage != null && e.SubItem.BackColor != Color.Transparent) { item_bg = new SolidBrush(Color.FromArgb(130, e.SubItem.BackColor)); } if ((e.ItemState & ListViewItemStates.Selected) != 0) { item_brush = new SolidBrush(Color.White); item_bg = Brushes.DarkBlue; if (BackgroundImage != null) { item_bg = new SolidBrush(Color.FromArgb(130, Color.DarkBlue)); } } if ((e.ItemState & ListViewItemStates.Hot) != 0) item_font = new Font(item_font, FontStyle.Underline); e.Graphics.FillRectangle(item_bg, e.Bounds); StringFormat format = new StringFormat(); format.Alignment = (StringAlignment)e.Header.TextAlign; format.Trimming = StringTrimming.EllipsisCharacter; if (e.SubItem.Tag is StringAlignment) { format.Alignment = (StringAlignment)e.SubItem.Tag; } Rectangle text_rect = new Rectangle(e.Bounds.Location, e.Bounds.Size); Rectangle pic_rect = new Rectangle(e.Bounds.X + 2, e.Bounds.Y + 2, 16, 16); if (e.ColumnIndex == 0 && e.Item.ImageIndex >= 0) { text_rect.Inflate(-20, 0); text_rect.Offset(2, 0); e.Graphics.DrawImage(e.Item.ImageList.Images[e.Item.ImageIndex], pic_rect); } if (e.SubItem.Tag is Image) { text_rect.Inflate(-20, 0); text_rect.Offset(2, 0); e.Graphics.DrawImage((Image)e.SubItem.Tag, pic_rect); } format.LineAlignment = (System.Drawing.StringAlignment)e.Header.TextAlign; format.FormatFlags = StringFormatFlags.NoWrap; e.Graphics.DrawString(e.SubItem.Text, item_font, item_brush, text_rect, format); }
-
Hat sich erledigt.Ich habe OnPaint so geändert das nur die sichtbaren Items gezeichnet werden und das hat anscheined das Problem behoben.