Winforms双缓冲

我把这个添加到我的表单的构造函数代码中:

this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true); 

但是,当它加载控件时,它仍然显示丑陋的文物,只要它们改变(表单及其组件更改(需要更新))。

我需要做什么不同?

这只对表单本身产生影响,而不是子控件。 如果你有很多这样的东西,那么他们需要轮流自己画画的时间就会变得很明显,它会留下一个长方形的洞,在这个洞里,控制权不会被填满,直到孩子的控制权转移。

你需要做的就是对整个表单控件进行双缓冲。 这是自从Windows XP使WS_EX_COMPOSITED风格标志可用的可用选项。 将其粘贴到您的表单中以将其打开:

 protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED return cp; } } 

它根本不加速绘画,但是延迟之后窗体会卡在屏幕上。 消除可见的油漆工件。 确定延迟需要不使用控件。 你可以通过使用OnPaint方法来绘制“控件”,并使OnMouseClick事件明白用户点击了什么“控件”。