Пользовательский ListView в Winforms? - PullRequest
5 голосов
/ 22 октября 2009

Можно ли нарисовать несколько строк в виде списка?

Я переопределил событие OnPaint, но не вижу никаких изменений. Я проверил некоторый код в пользовательском списке, но похоже, что люди используют p / invoke и т. Д. Почему?

Разве список не настраивается так же, как другие winforms, как элемент управления Button?

Я не собираюсь дико настраивать, просто нарисуйте еще немного после того, как это будет сделано стандартным способом.

Ответы [ 3 ]

9 голосов
/ 22 октября 2009

Вы не можете просто переопределить метод OnPaint(). Этот метод ничего не делает в ListView. Точно так же OwnerDrawn позволяет вам рисовать каждую ячейку, но не позволяет закрашивать элемент управления в целом.

Используйте ObjectListView (обертку с открытым исходным кодом вокруг .NET WinForms ListView) и используйте функцию наложения . Это позволяет вам без усилий делать что-то вроде этого:

text over a ListView

Это было произведено этим кодом:

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;
7 голосов
/ 22 октября 2009
 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));
        }

    }
1 голос
/ 22 октября 2009

Установите для свойства OwnerDraw значение true.

Затем вы можете обрабатывать события DrawItem , DrawSubItem и DrawColumnHeader для рисования на определенных элементах ListView.

...