Я не знаю, какую технику вы используете в настоящее время, но стоит сказать, что рисование непосредственно на элементе управления DataGridView
путем обработки его события Paint
не рекомендуется.
Вам придется разбить код рисования на границы определенных ячеек и / или строк и рисовать в событиях CellPainting
или 'RowPostPaint`. Чтобы нарисовать прямоугольник вокруг нескольких ячеек, можно рисовать внутри границ затронутых ячеек или рисовать в соседних ячейках.
Свойство CellBounds
DataGridViewCellPaintingEventArgs
дает вам координаты, которые всегда относительно самой ячейки, что означает, что она автоматически адаптируется к прокрутке в пределах DataGridView
.
Редактировать: Пример того, как обрабатывать событие CellPainting
для рисования пользовательской границы вокруг определенной ячейки:
void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) {
e.Paint(e.ClipBounds, e.PaintParts);
if ((e.RowIndex == myRowIndex) && (e.ColumnIndex == myColumnIndex)) {
Pen pen = new Pen(Color.Red, 2f);
e.Graphics.DrawRectangle(pen, e.CellBounds);
}
e.Handled = true;
}