1

我开发了一个 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 的代码中。我不知道该怎么做,我使用的所有控件都不是自定义控件。

看看这里并查看第一个答案:

如何修复用户控件中的闪烁

提前致谢,

4

2 回答 2

1

您也可以考虑打开 WS_EX_COMPOSITED 样式,在某些情况下可能会有所帮助:

parms.ExStyle |= 0x02000000; //WS_EX_COMPOSITED
于 2013-05-04T19:14:57.283 回答
0

尝试从 Panel 派生并将 DoubleBuffered() 设置为 True:

public class BufferedPanel : Panel
{
    public BufferedPanel()
    {
        this.DoubleBuffered = true;
    }
}

然后从您的工具箱中使用它而不是默认面板。

于 2013-05-04T20:26:30.267 回答