Отображать текст заголовка после события CellPainting в сетке просмотра winforms - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть элемент управления datagridview, в котором я хочу поместить линию в 3 пикселя внизу каждой ячейки заголовка, чтобы она выглядела как

enter image description here

У меня естьпоместите код в CellPainting даже для сетки данных, например:

           if (e.RowIndex < 0)   // headers
            {

                Rectangle newRect = new Rectangle(e.CellBounds.X, e.CellBounds.Y - 1 + e.CellBounds.Height, e.CellBounds.Width, 2);
                using (Brush gridBrush = new SolidBrush(Color.Red))
                {
                    e.Graphics.FillRectangle(gridBrush, newRect);
                }e.Handled = true;
            }

Красная линия отображается правильно (я добавлю 3 пикселя позже).Однако текст заголовка теперь отсутствует.

Я предполагаю, что установка e.Handled = true;говорит не продолжать рисовать исходный текст заголовка.Если я установлю значение false, красная линия исчезнет.Для этого элемента управления нет концепции base.CellPainting (по-видимому).

Я знаю, что могу нарисовать текст самостоятельно, но тогда мне нужно беспокоиться о выравнивании, шрифте ...

есть ли теперь способ сказать системе, чтобы она выполняла как линию, так и рисовала оригинальный текст заголовка?

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

1 Ответ

0 голосов
/ 28 февраля 2019

Нет базы. Концепция типа CellPainting для этого элемента управления

Действительно;DGV имеет больше возможностей, чем просто вызов базового события.

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

if (e.RowIndex < 0)   // headers
{
    e.PaintBackground(e.CellBounds, true);   // draw the default background

    Rectangle newRect = 
              new Rectangle(e.CellBounds.X, e.CellBounds.Bottom - 2, e.CellBounds.Width, 2);
    e.Graphics.FillRectangle(Brushes.Red, newRect);  // now draw the red line

    e.PaintContent(e.CellBounds);        // finally draw the text in the default way

    e.Handled = true;                   // done
}

Если вы отключите dgv.EnableHeadersVisualStyles вастакже можно установить множество других свойств, которые будут использоваться при рисовании заголовков столбцов.

Для более тонко настроенных параметров вы можете обратиться к MSDN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...