2013-05-04 89 views
1

我开发了一个Windows应用程序,其接口具有多个文本框,并将它们全部放置在一个面板(面板具有背景图像)中。减少闪烁通过关闭WS_CLIPCHILDREN

无论何时加载面板,窗口(带有这些文本框)都会闪烁。

我读了很多的建议,以尽量减少这种闪烁, 一个建议的解决方案的是以下,

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

我的表单加载时没有闪烁。你确定在加载过程中你没有在你的UI线程中做很多不必要的工作吗? – siride 2013-05-04 17:04:02

+0

其实我有一个最初不可见的面板,当用户点击一个按钮时,这个面板(以及它上面的文本框)将会可见,此外,所有的文本框都将被填充。这不是那种明显的闪烁。但它有点困扰。谢谢:) – user1477701 2013-05-04 17:20:56

回答

1

你可能会考虑将同时开启WS_EX_COMPOSITED风格,也可能在某些情况下帮助:

parms.ExStyle |= 0x02000000; //WS_EX_COMPOSITED 
+0

谢谢托德,不幸的是把它打开并没有什么区别,这就是为什么我想在我的问题中尝试代码,它可能会为我做些事情。再次感谢。 – user1477701 2013-05-04 22:17:59

0

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

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

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

+0

没有改变,仍然轻弹谢谢你idle_Mind你的帮助。 – user1477701 2013-05-04 22:19:16