Benutzerdefinierte Listview in WinForms?
Frage
Ist es möglich, einige Saiten auf eine Listenansicht zu ziehen?
I außer Kraft gesetzt, das OnPaint Ereignisses, aber ich sehe keine Veränderung. Ich hatte einige Codes auf benutzerdefinierte Listenansicht aus, aber es scheint, wie Menschen sind mit p / aufrufen, usw. Warum?
Ist das nicht so individuell wie andere winforms Liste, wie das Button-Steuerelement?
Ich werde nicht wild anpassen, nur etwas mehr malen, nachdem es die Standard-Malerei gemacht hat.
Lösung
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));
}
}
Andere Tipps
Sie können nicht nur die OnPaint()
Methode außer Kraft setzen. Diese Methode macht nichts in einem Listview. In ähnlicher Weise OwnerDrawn
können benutzerdefinierte Sie jede Zelle ziehen, aber Sie das Steuerelement als Ganzes übermalen nicht nachlässt.
Verwenden Sie ein Object (eine Open-Source-Wrapper um .NET WinForms Listview ) und verwendet sein Overlay-Funktion . Das lässt Sie mühelos etwas tun, wie folgt aus:
Dies wurde durch diesen Code erzeugt:
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;
Stellen Sie den OwnerDraw Eigenschaft auf true.
Sie können dann behandeln die DrawItem , DrawSubItem , und DrawColumnHeader Ereignisse ziehen spezifische Elemente des Listview.