2013-05-04 71 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