2009-10-22 34 views
5

Có thể vẽ một số chuỗi vào một listview?Custom ListView trong Winforms?

Tôi đã ghi đè sự kiện OnPaint nhưng tôi không thấy bất kỳ thay đổi nào. Tôi đã kiểm tra một số mã trên listview tùy chỉnh, nhưng có vẻ như mọi người đang sử dụng p/invoke, vv Tại sao?

Danh sách không phải là danh sách có thể tùy chỉnh như các biểu tượng thắng khác, chẳng hạn như điều khiển Nút?

Tôi sẽ không tùy chỉnh một cách hoang dại, chỉ cần vẽ một số chi tiết sau khi hoàn thành bức tranh tiêu chuẩn.

Trả lời

7
class MyCustomlistView : ListView 
    { 
     public MyCustomlistView() 
      : base() 
     { 
      SetStyle(ControlStyles.UserPaint, true); 
     } 
     protected override void OnPaint(PaintEventArgs e) 
     { 
      base.OnPaint(e); 
      e.Graphics.DrawString("This is a custom string", new Font(FontFamily.GenericSerif, 10, FontStyle.Bold), Brushes.Black, new PointF(0, 50)); 
     } 

    } 
+0

Thanks, điều này đã làm các trick. –

+0

Điều này không hoạt động với một ListView. Nó chỉ đơn giản là làm cho ListView vẽ không có gì. – Grammarian

8

Bạn không thể chỉ ghi đè phương thức OnPaint(). Phương thức đó không làm bất cứ điều gì trong một ListView. Tương tự, OwnerDrawn cho phép bạn tùy chỉnh vẽ từng ô, nhưng không cho phép bạn vẽ toàn bộ quyền kiểm soát.

Sử dụng ObjectListView (trình bao bọc mã nguồn mở xung quanh .NET WinForms ListView) và sử dụng Overlay feature. Cho phép bạn dễ dàng làm điều gì đó như thế này:

text over a ListView http://i37.tinypic.com/29zwu1d.jpg

này được sản xuất bởi mã này:

this.olv1.OverlayText.Alignment = ContentAlignment.BottomRight; 
this.olv1.OverlayText.Text = "Trial version"; 
this.olv1.OverlayText.BackColor = Color.White; 
this.olv1.OverlayText.BorderWidth = 2.0f; 
this.olv1.OverlayText.BorderColor = Color.RoyalBlue; 
this.olv1.OverlayText.TextColor = Color.DarkBlue; 
Các vấn đề liên quan