Двойной буфер дочерних элементов управления в пользовательском элементе управления (C #) - PullRequest
5 голосов
/ 05 октября 2008

Я хочу создать двойной буфер для пользовательского элемента управления, который содержит кнопки. Я пробовал различные способы двойного буфера управления; SetStyle, BufferedGraphicsContext и рисование в растровое изображение. Все это прекрасно работает для пользовательского рисования элемента управления, но ни один из них не обрабатывает отрисовку кнопки в задний буфер Как мне этого добиться?

1 Ответ

2 голосов
/ 05 октября 2008

Технически вы не можете, и вам действительно не нужно, если это стандартные кнопки .NET WinForms.

Сами кнопки управляют этим через защищенное свойство DoubleBuffered. Единственный способ получить доступ к этому - получить новый класс из S.W.F.Button и реализовать код для включения свойства DoubleBuffered в экземплярах этого класса (я бы, вероятно, сделал это в конструкторе). Наконец, используйте объекты этого нового класса в вашей форме вместо S.W.F.Buttons.

Однако, насколько я помню, кнопки просто взяты из WinAPI; они не GDI +. В результате вам не нужно нуждаться в для двойной буферизации их рисунка. Тем не менее, я не знаю ваш сценарий использования, и я не знаю, какие симптомы отображает ваше приложение, поэтому я могу ошибаться. :)

Возможно, вам стоит почитать книгу Pro .NET 2.0 Windows Forms и пользовательские элементы управления в C # . Все это было обобщено на основе информации в этой книге.

...