Пользовательская роспись в DataGridView, странное визуальное отображение

Я работаю над приложением, которое использует сетку данных для визуализации некоторых данных. Данные логически структурированы четыре на четыре. И чтобы визуализировать это, я хочу нарисовать линию / границу каждого четвертого ряда в представлении данных.

Я сделал это, написав следующий метод RowPostPaint (без объемного кода)

System::Void dataGridView1_RowPostPaint(System::Object^  sender, Forms::DataGridViewRowPostPaintEventArgs^  e) {

A = ...

Rectangle rowBorder  = dataGridView1->GetRowDisplayRectangle(e->RowIndex,true);

if(A->ID % 4 == 0){
e->Graphics->DrawLine(gcnew Pen(Drawing::Color::Black),(float)
rowBorder.X ,(float)(rowBorder.Y + rowBorder.Height-2), (float) rowBorder.X +
rowBorder.Width  ,(float) (rowBorder.Y + rowBorder.Height-2) );
}
}

По какой-то причине картина повреждается (показывает больше строк, чем должно быть, см. Рисунок), когда я использую полосу прокрутки или изменяю размер окна. Например, принудительное перерисовывание путем выбора затронутой строки приводит к удалению ошибочной строки.

Я попробовал несколько советов (двойная буферизация, клипы и т. Д.), Чтобы это исправить, но пока не смог этого сделать.
Как вы, наверное, поняли, я довольно новичок в графике / рисовании в c ++ / cli.
Теперь у меня нет идей, я надеюсь, что вы можете прийти с некоторыми свежими

Ошибочная картина

0

Решение

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector