Двойной контроль буферизации вызывает появление серого цвета

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

System.Reflection.PropertyInfo aProp =
                typeof(System.Windows.Forms.Control).GetProperty(
                    "DoubleBuffered",
                    System.Reflection.BindingFlags.NonPublic |
                    System.Reflection.BindingFlags.Instance);

            aProp.SetValue(drawControl, true, null); 

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

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

Я использую C # с .NET framework версии 4.0.


person Thomi    schedule 18.04.2011    source источник


Ответы (1)


Попробуйте установить для элемента управления FlatStyle значение FlatStyle.Standard, если в настоящее время для него установлено значение FlatStyle.System.

(Установка DoubleBuffered с помощью отражения тоже выглядит ужасно, но, возможно, вам нужно это сделать по какой-то причине)

person Will Dean    schedule 18.04.2011
comment
Когда для него установлено значение «Система», вся нагрузка по отрисовке элементов управления передается ОС, и Winforms не участвует в этом. Свойства дизайнера, такие как цвет фона, не работают с FlatStyle.System. - person Will Dean; 19.04.2011