通过关闭WS_CLIPCHILDREN减少闪烁

时间:2013-05-04 16:36:56

标签: c# panel

我开发了一个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

提前致谢,

2 个答案:

答案 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。