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

在 .NET 1.xDoubleBuffered,控件上没有属性,因此SetStyle启用它的唯一方法是。您看到的代码SetStyle可能仍然在1.x天左右,或者来自从那时起就没有改变习惯的开发人员。

于 2008-11-19T17:29:24.697 回答
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 回答