Ужасная работа перерисовки DataGridView на одном из моих двух экранов

81
задан Peter Mortensen 14 December 2017 в 21:59
поделиться

5 ответов

Просто необходимо сделать пользовательский класс базирующимся прочь DataGridView, таким образом, можно включить его DoubleBuffering.Вот именно!


class CustomDataGridView: DataGridView
{
    public CustomDataGridView()
    {
        DoubleBuffered = true;
    } 
}

, пока все мои экземпляры сетки используют эту пользовательскую версию, все хорошо. Если я когда-нибудь сталкиваюсь с ситуацией, вызванной этим, где я не в состоянии использовать решение для подкласса (если у меня нет кода), я предполагаю, что мог бы попытаться ввести то управление на форму:) (хотя я, более вероятно, попытаюсь использовать отражение, чтобы вынудить свойство DoubleBuffered на внешнюю сторону еще раз избежать зависимости).

грустно, что такая тривиально простая вещь съела большую часть моего времени...

Примечание: Создание ответа ответ так вопрос может быть отмечено, как отвечено

64
ответ дан Benoit 24 November 2019 в 09:37
поделиться

Только для добавления, что мы сделали для устранения этой проблемы: Мы обновили до последних драйверов Nvidia, решил проблему. Никакой код не должен был быть переписан.

Для полноты, картой был Nvidia Quadrо NVS 290 с драйверами, датированными мартом 2008 (v. 169). Обновление до последнего (v. 182 датированных февраля 2009) значительно улучшило события краски для всех моих средств управления, специально для DataGridView.

Эта проблема не была замечена ни на каких картах ATI (где разработка происходит).

1
ответ дан Peter Mortensen 24 November 2019 в 09:37
поделиться

Мы испытали подобную проблему с помощью.NET 3.0 и DataGridView в системе парного монитора.

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

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

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

0
ответ дан 24 November 2019 в 09:37
поделиться

Вот код, который устанавливает свойство с помощью отражения, без создания подклассов, как предлагает Бенуа.

typeof(DataGridView).InvokeMember(
   "DoubleBuffered", 
   BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty,
   null, 
   myDataGridViewObject, 
   new object[] { true });
59
ответ дан 24 November 2019 в 09:37
поделиться

Я нашел решение проблемы. Перейдите на вкладку устранения неполадок в расширенных свойствах дисплея и проверьте ползунок аппаратного ускорения. Когда я получил от ИТ-отдела свой новый корпоративный компьютер, он был установлен на одну отметку от полной, и у меня не было никаких проблем с сетями данных. Как только я обновил драйвер видеокарты и установил его на полную, отрисовка элементов управления сеткой данных стала очень медленной. Поэтому я вернул его на место, и проблема исчезла.

Надеюсь, этот трюк сработает и для вас.

1
ответ дан 24 November 2019 в 09:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: