2008-11-19 3 views
1

Я видел следующий код, чтобы включить двойную буферизацию на WinForm:Включение двойной буферизации

// Activates double buffering 
this.SetStyle(ControlStyles.DoubleBuffer | 
    ControlStyles.OptimizedDoubleBuffer | 
    ControlStyles.UserPaint | 
    ControlStyles.AllPaintingInWmPaint, true); 
this.UpdateStyles(); 

Это отличается каким-либо образом с простой установкой Form.DoubleBuffering = верно?

ответ

5

Control.DoubleBuffering выполняет

SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, value); 

так код также устанавливает ControlStyles.UserPaint (что, вероятно, не влияет на данный момент).

2

Установка двойного буферизации формы задает двойную буферизацию для этой формы. Это то же самое, как вызов

form.SetStyle(ControlStyles.OptimizedDoubleBuffer, value); 

другие флаги, как UserPaint и AllPaintingInWmPaint стили, которые не установлены, просто установив control.DoubleBuffering = True

1

В .NET 1. х, не было DoubleBuffered собственности на контрольной, так SetStyle был единственный способ, чтобы включить его. Код, который вы видите, который использует SetStyle, вероятно, все еще находится вокруг 1. x дней, или от разработчиков, которые с тех пор не изменили своих привычек.

1

От Stackoverflow: How to double buffer .NET controls on a form?:

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); 
}