2009-10-22 5 views
5

Можно ли нарисовать некоторые строки в виде списка?Пользовательский ListView в Winforms?

Я переопределил событие OnPaint, но я не вижу никаких изменений. Я проверил некоторый код в пользовательском listview, но кажется, что люди используют p/invoke и т. Д. Почему?

Недоступный список как настраиваемый как другие winforms, такие как Button Control?

Я не собираюсь настраиваться дико, просто нарисуйте еще немного после того, как это будет сделана стандартная картина.

ответ

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

Спасибо, это сделал трюк. –

+0

Это не работает с ListView. Это просто заставляет ListView ничего не рисовать. – Grammarian

8

Вы не можете просто переопределить метод OnPaint(). Этот метод ничего не делает в ListView. Аналогично, OwnerDrawn позволяет настраивать каждую ячейку, но не позволяет красить элемент управления в целом.

Используйте ObjectListView (оболочка с открытым исходным кодом вокруг .NET WinForms ListView) и используйте его Overlay feature. Это позволяет без особых усилий сделать что-то вроде этого:

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

Это был произведен этот код:

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; 
Смежные вопросы