синхронизировать рисование прямоугольников и прокрутку в datagridview - PullRequest
0 голосов
/ 05 ноября 2010

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

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

Любая помощь или направление в этом направлении приветствуется.

Спасибо

1 Ответ

1 голос
/ 05 ноября 2010

Я не знаю, какую технику вы используете в настоящее время, но стоит сказать, что рисование непосредственно на элементе управления 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;
}
...