Двойной буфер дочерних элементов управления в пользовательском элементе управления (C #)
-
05-07-2019 - |
Вопрос
Я хочу создать двойной буфер для пользовательского элемента управления, который содержит кнопки. Я пробовал различные способы двойного буфера управления; SetStyle, BufferedGraphicsContext и рисование в растровое изображение. Все это прекрасно работает для пользовательского рисования элемента управления, но ни один из них не обрабатывает отрисовку кнопки в задний буфер. Как мне этого добиться?
Решение
Технически вы не можете, и вам действительно не нужно, если это стандартные кнопки .NET WinForms.
Сами кнопки управляют этим через защищенное свойство DoubleBuffered. Единственный способ получить доступ к этому - получить новый класс из S.W.F.Button и реализовать код для включения свойства DoubleBuffered в экземплярах этого класса (я бы, вероятно, сделал это в конструкторе). Наконец, используйте объекты этого нового класса в вашей форме вместо S.W.F.Buttons. Р>
Однако, насколько я помню, кнопки просто взяты из WinAPI; они не GDI +. В результате вам не нужно нуждаться в для двойной буферизации их рисунка. Тем не менее, я не знаю ваш сценарий использования, и я не знаю, какие симптомы отображает ваше приложение, поэтому я могу ошибаться. :) Р>
Возможно, вы захотите проверить книгу Pro .NET 2.0 Windows Forms и пользовательские элементы управления в C # а>. Все это было обобщено на основе информации в этой книге.