我已经看到以下代码在winform上启用双缓冲:
// Activates double buffering
this.SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);
this.UpdateStyles();
这与设置Form.DoubleBuffering = true?
有什么不同答案 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);
}