Он защищен, потому что DGV наследует свойство от Control. И Control.DoubleBuffered защищен. Это имеет смысл, потому что каждый производный элемент управления должен сам решить, включить это. И для управляющего пользователя не имеет смысла произвольно включать или выключать его. Конструкторы DGV решили выключить.
Одна из причин, по которой они могли решить это, заключается в том, что двойная буферизация фактически замедляет рисование. Дополнительный шаг для визуализации растрового изображения буфера требует времени. Человеческий глаз просто смотрит быстрее, вы видите, как внезапно появляется растровое изображение. Вы не можете увидеть время, необходимое для рисования в растровом изображении. Если только другие органы управления не нужно красить и их очередь наступает после DGV, то это хорошо видно.
То, что вы видите, - это форма, нарисованная первой, с отверстиями в местах расположения элементов управления. У этих отверстий белый фон. Черный при использовании свойства TransparencyKey или Opacity. Затем каждый элемент управления получает событие Paint, и отверстия заполняются одна за другой. Этот эффект также воспринимается пользователем как мерцание, хотя это мерцание, отличное от того, которое устраняет DoubleBuffered. Особенно это заметно на черном фоне.
Для решения этой проблемы необходимо, чтобы вся форма со всеми ее элементами управления была дважды буферизована. Это недоступно в Windows Forms. Однако Windows XP и более поздние версии на самом деле это поддерживают. Проверьте эту ветку чтобы увидеть, как это делается. Помните, что он может иметь побочные эффекты, как описано в этом потоке.
person
Hans Passant
schedule
31.10.2008