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事件明白用户点击了什么“控件”。