C #: переопределить полосы прокрутки DataGridView (пользовательские OnPaint)? - PullRequest
1 голос
/ 17 декабря 2010

У меня есть usercontrol, который наследуется от DataGridView. Я переопределил OnRowPrePaint, OnRowPostPaint, OnCellPaint и некоторые другие, чтобы я мог рисовать всю вещь, как я хочу. Все прекрасно работает, кроме полос прокрутки. Как я могу перехватить нарисованные полосы прокрутки и нарисовать свою собственную?

В идеале существует некоторая структура данных, которая содержит границы для самой полосы прокрутки, а также границы для фактически ползунка прокрутки. Тогда я могу просто рисовать на графическом слое в этих местах.

Есть ли способ сделать это? Кажется, что все остальное было, поэтому я думаю, что есть какой-то способ сделать это ...

Ответы [ 2 ]

0 голосов
/ 11 января 2011

При наследовании от класса полосы прокрутки добавьте это в Sub New:

Me.SetStyle(ControlStyles.UserPaint, True)

Событие OnPaint теперь срабатывает.

Чтобы переопределить стандартные кнопки / ползунок от рисования при нажатии элемента управления:

Me.SetStyle(ControlStyles.UserMouse, True)

И чтобы уменьшить мерцание:

Me.SetStyle(ControlStyles.AllPaintingInWmPaint, False)

EDIT:

Мне явно нужно научиться читать.

Не заметил

usercontrol, который наследуется от DataGridView

немного ........

0 голосов
/ 17 декабря 2010

Первое, что приходит на ум: используйте события рисования с полос прокрутки. В любом случае полосы прокрутки являются производными от Control. Не может быть оптимальным решением ...

public class MyDGV : DataGridView
{
    this.VerticalScrollBar.Paint += new PaintEventHandler(VerticalScrollBar_Paint);
}

void VerticalScrollBar_Paint(object sender, PaintEventArgs e)
{
    // Paint stuff
}
...