public void Draw(ListViewItem item, Graphics g, Rectangle rect) { if (!myOffsetsAreCorrect) { UpdateOffsets(g); } int startOffset = CalculateOffset(item); for (int i = 0; i < myPainters.Length; i++) { IItemPainter painter = myPainters[i]; Size size = painter.GetSize(item, g); int offset = myOffsets[i] + startOffset; int endOffset = i == myPainters.Length - 1 ? rect.Width : myOffsets[i + 1]; switch (myAlignments[i]) { case ColumnAlignment.Right: offset += (endOffset - offset) - size.Width; break; case ColumnAlignment.Center: offset += ((endOffset - offset) - size.Width) / 2; break; } painter.Draw(item, g, new Rectangle(offset, 0, endOffset - offset, 0)); } }
/// <summary> /// Draws Item /// </summary> private void DrawItem(ref NMLVCUSTOMDRAW customDraw) { try { ListViewItem item = this.Items[customDraw.nmcd.dwItemSpec]; if (myItemPainter != null && myItemPainter.IsHandled(item)) { using (Graphics g = Graphics.FromHdc(customDraw.nmcd.hdc)) { myItemPainter.Draw(item, g, new Rectangle(0, 0, ClientSize.Width, 0)); } } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine("CustomListView.DrawItem failed : " + ex, "UI"); } }
// private Rectangle GetFullItemRectangle(int index) // { // //TODO: GetItemRectangle works strange // Rectangle rectangle = GetItemRectangle(index); // rectangle.Height = GetItemHeight(index) + 1; // return rectangle; // } // protected override void OnSelectedIndexChanged(EventArgs e) // { // try // { // SuspendLayout(); // if (myOldSelectedIndex != SelectedIndex) // { // if ( myOldSelectedIndex >= 0 && myOldSelectedIndex < Items.Count ) // Invalidate(GetFullItemRectangle(myOldSelectedIndex)); // int index = SelectedIndex; // if ( index >= 0 && index < Items.Count ) // Invalidate(GetFullItemRectangle(index)); // myOldSelectedIndex = SelectedIndex; // } // base.OnSelectedIndexChanged (e); // ResumeLayout(false); // } // catch (Exception ex) // { // System.Console.Write( ex ); // } // } // // protected override void OnDrawItem(DrawItemEventArgs e) { try { if (myItemPainter != null && e.Index >= 0 && e.Index < Items.Count) { //System.Console.WriteLine(e.Bounds.Height); myItemPainter.Draw(Items[e.Index], e.Graphics, e.Bounds, e.Index == mySelectedIndexPreview); } else { base.OnDrawItem(e); } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine("CustomListBox.DrawItem failed : " + ex, "UI"); Invalidate(e.Bounds); } }