1

winform でダブル バッファリングを有効にする次のコードを見てきました。

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

これは単に Form.DoubleBuffering = true を設定することとは何か違いますか?

4

4 に答える 4

5

Control.DoubleBuffering行う

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

したがって、コードも設定ControlStyles.UserPaintされます (この時点ではおそらく効果はありません)。

于 2008-11-19T17:12:28.053 に答える
2

フォームの DoubleBuffering を設定すると、そのフォームのダブル バッファリングが設定されます。呼ぶのと同じ

form.SetStyle(ControlStyles.OptimizedDoubleBuffer, value);

UserPaint や AllPaintingInWmPaint などの他のフラグは、単に control.DoubleBuffering = true を設定するだけでは設定されないスタイルです。

于 2008-11-19T17:09:51.100 に答える
1

Stackoverflowから:フォームで.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); 
}
于 2009-06-02T14:59:36.963 に答える
1

.NET 1. xDoubleBufferedでは、コントロールにプロパティがなかったためSetStyle、それを有効にする唯一の方法でした。SetStyle使用法がおそらくまだ1.x日からか、それ以来習慣を変えていない開発者からのものであることがわかるようにコーディングしてください。

于 2008-11-19T17:29:24.697 に答える