2009-10-22 12 views
5

È possibile disegnare alcune stringhe su un listview?ListView personalizzato in Winforms?

Ho ignorato l'evento OnPaint ma non vedo alcuna modifica. Ho controllato un po 'di codice su listview personalizzato, ma sembra che le persone stiano usando p/invoke, ecc. Perché?

L'elenco non è personalizzabile come altre forme di win, come il controllo Button?

Non ho intenzione di personalizzare selvaggiamente, solo dipingere un po 'di più dopo che è stato fatto il dipinto standard.

risposta

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

Grazie, questo ha fatto il trucco. –

+0

Questo non funziona con un ListView. Semplicemente fa in modo che ListView non disegni nulla. – Grammarian

8

Non è possibile ignorare il metodo OnPaint(). Quel metodo non fa nulla in un ListView. Allo stesso modo, OwnerDrawn ti consente di disegnare ogni cella in modo personalizzato, ma non ti consente di dipingere il controllo nel suo complesso.

Utilizzare un ObjectListView (un wrapper open source attorno a .NET WinForms ListView) e utilizzare il suo Overlay feature. Che ti permette di sforzo di fare qualcosa di simile:

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

Questo è stato prodotto da questo codice:

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; 
Problemi correlati