Включение двойной буферизации
Я видел следующий код для включения двойной буферизации в winform:
// Activates double buffering
this.SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);
this.UpdateStyles();
Отличается ли это каким-либо образом от простой установки Form.DoubleBuffering = true?
4 ответа
Control.DoubleBuffering
выполняет
SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, value);
так что ваши кодовые наборы ControlStyles.UserPaint
а также (что, вероятно, не влияет на данный момент).
Установка DoubleBuffering формы установит двойную буферизацию для этой формы. Это так же, как звонить
form.SetStyle(ControlStyles.OptimizedDoubleBuffer, value);
Другие флаги, такие как UserPaint и AllPaintingInWmPaint, являются стилями, которые не устанавливаются простой установкой control.DoubleBuffering = true
В.NET 1.х не было DoubleBuffered
собственность на элементы управления, так SetStyle
был единственный способ включить его. Код вашего видения, который использует SetStyle
Вероятно, либо до 1.x дней, либо от разработчиков, которые с тех пор просто не изменили свои привычки.
Из Stackru: Как удвоить буфер управления.NET формы?:
public static void SetDoubleBuffered(System.Windows.Forms.Control c)
{
//Taxes: Remote Desktop Connection and painting
//http://blogs.msdn.com/oldnewthing/archive/2006/01/03/508694.aspx
if (System.Windows.Forms.SystemInformation.TerminalServerSession)
return;
System.Reflection.PropertyInfo aProp = typeof(System.Windows.Forms.Control).GetProperty(
"DoubleBuffered",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
aProp.SetValue(c, true, null);
}