ListView personalizado no WinForms?
Pergunta
É possível tirar algumas cordas em um listview?
Eu substituído o evento OnPaint, mas eu não vejo qualquer mudança. I check-out algum código em listview costume, mas parece que as pessoas estão usando p / invoke, etc. Por que?
Não é lista como personalizável como outros winforms, como o controle de botão?
Não vou personalizar descontroladamente, apenas pintar um pouco mais depois de pronto a pintura padrão.
Solução
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));
}
}
Outras dicas
Você não pode simplesmente substituir o método OnPaint()
. Esse método não faz nada em um ListView. Da mesma forma, OwnerDrawn
permite costume desenhar cada célula, mas não permite que você pintar sobre o controle como um todo.
Use um ObjectListView (um wrapper de código aberto em torno .NET WinForms ListView ) e usar a sua Overlay recurso . Isso permite que você facilmente fazer algo como isto:
Este foi produzido 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;
Defina a OwnerDraw propriedade para true.
Você pode, então, lidar com a DrawItem , DrawSubItem , e DrawColumnHeader eventos para desenhar elementos específicos do ListView.