我在表单的构造函数中添加了以下代码:
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);
但是当它加载控件时仍然显示丑陋的伪影,每当它们发生改变时(表单及其组件经常需要更新)。
我需要做些什么不同的事情吗?
我在表单的构造函数中添加了以下代码:
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事件能够智能地识别用户点击了哪个“控件”。