我开发了一个Windows应用程序,其界面有多个文本框,所有这些文本框都放在一个面板中(面板有一个背景图像)。
每当加载面板时,窗口(带有这些文本框)都会闪烁。
我阅读了很多建议,以尽量减少这种闪烁, 建议的解决方案之一如下,
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
但它不适合我,
我读到了使用此代码关闭WS_CLIPCHILDREN:
protected override CreateParams CreateParams {
get {
var parms = base.CreateParams;
parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN
return parms;
}
}
此代码可帮助一些遇到同样问题的人。所以我想使用它,但我真的不知道在哪里粘贴它,我的意思是,我读到它应该不是粘贴在表单中,而是粘贴在 UserControl的代码中。我不知道该怎么做,我使用的所有控件都不是自定义控件。
看看这里&看到第一个答案:
How to fix the flickering in User controls
提前致谢,
答案 0 :(得分:1)
您也可以考虑启用WS_EX_COMPOSITED样式,在某些情况下可能会有所帮助:
parms.ExStyle |= 0x02000000; //WS_EX_COMPOSITED
答案 1 :(得分:0)
尝试从Panel派生并将DoubleBuffered()设置为True:
public class BufferedPanel : Panel
{
public BufferedPanel()
{
this.DoubleBuffered = true;
}
}
然后使用ToolBox而不是默认的Panel。