2009-10-22 48 views
5

¿Es posible dibujar algunas cadenas en una vista de lista?ListView personalizado en Winforms?

Anulo el evento OnPaint pero no veo ningún cambio. Comprobé un código en la vista de lista personalizada, pero parece que la gente usa p/invoke, etc. ¿Por qué?

¿No hay listas tan personalizables como otras formas de ganar, como el control Button?

No voy a personalizar salvajemente, solo pintar un poco más después de haber hecho la pintura estándar.

Respuesta

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

Gracias, esto hizo el truco. –

+0

Esto no funciona con un ListView. Simplemente hace que ListView no dibuje nada. – Grammarian

8

No puede anular el método OnPaint(). Ese método no hace nada en un ListView. De manera similar, OwnerDrawn le permite dibujar de forma personalizada cada celda, pero no le permite pintar sobre el control como un todo.

Utilice un ObjectListView (un contenedor de código abierto alrededor de .NET WinForms ListView) y use su Overlay feature. Que le permite sin esfuerzo hacer algo como esto:

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

Este fue producido por este código:

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; 
Cuestiones relacionadas