Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom ListView in Winforms?

Is it possible to draw some strings onto a listview?

I overridden the OnPaint event but I don't see any change. I checked out some code on custom listview, but it seems like people are using p/invoke, etc. Why?

Isn't list as customizable as other winforms, like the Button control?

I am not gonna customize wildly, just paint some more after it's done the standard painting.

like image 207
Joan Venge Avatar asked Oct 22 '09 02:10

Joan Venge


3 Answers

You can't just override the OnPaint() method. That method doesn't do anything in a ListView. Similarly, OwnerDrawn lets you custom draw each cell, but doesn't let you paint over the control as a whole.

Use an ObjectListView (an open source wrapper around .NET WinForms ListView) and use its Overlay feature. That lets you effortlessly do something like this:

text over a ListView

This was produced by this code:

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;
like image 71
Grammarian Avatar answered Nov 13 '22 00:11

Grammarian


 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));
        }

    }
like image 23
André Pena Avatar answered Nov 13 '22 00:11

André Pena


Set the OwnerDraw property to true.

You can then handle the DrawItem, DrawSubItem, and DrawColumnHeader events to draw on specific elements of the ListView.

like image 30
SLaks Avatar answered Nov 13 '22 01:11

SLaks