启用双缓冲

时间:2008-11-19 17:01:59

标签: winforms visual-studio-2008 doublebuffered

我已经看到以下代码在winform上启用双缓冲:

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

这与设置Form.DoubleBuffering = true?

有什么不同

4 个答案:

答案 0 :(得分:5)

Control.DoubleBuffering执行

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

所以你的代码也设置了ControlStyles.UserPaint(此时可能没有效果)。

答案 1 :(得分:2)

设置表单的DoubleBuffering将为该表单设置双缓冲。这与调用

相同
form.SetStyle(ControlStyles.OptimizedDoubleBuffer, value);

UserPaint和AllPaintingInWmPaint等其他标志是仅通过设置control而设置的样式.DoubleBuffering = true

答案 2 :(得分:1)

在.NET 1. x 中,控件上没有DoubleBuffered属性,因此SetStyle是启用它的唯一方法。编码你看到使用SetStyle可能仍然是1. x 天,或者是那些从那时起没有改变习惯的开发人员。

答案 3 :(得分: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); 
}