C WinForm頁面切換導致閃爍的解決方法

2022-03-18 12:58:39 字數 758 閱讀 7641

問題描述

介面上放置大量的控制項(尤其是自定義控制項)會導致在窗體載入時,速度變得緩慢;當切換頁面時,也會時常產生閃爍的問題,非常影響使用者體驗。

解決方法

將此**寫在要解決閃爍問題的父窗體中:

protected override createparams createparams

}

原理winform窗體程式在啟動時繪製大量控制項的時間開銷非常大, 兩個原因導致了這種閃爍(flicker):

當乙個控制項需要繪製時,windows會向此窗體傳送兩條訊息,第一條是:wm_erasebkgnd,這條訊息使得背景得以繪製,第二條訊息是:wm_paint,使得前景被繪製,首先背景色是簡單的,所以速度較快,前景色較為耗時(相對),所以就產生了這種閃爍現象,這是問題的根源,winform為此提供了乙個解決方案:雙緩衝(optimizeddoublebuffer)。

當乙個窗體包含許多控制項的時候,需要大量的時間來進行繪製,尤其是預設屬性的按鈕控制項。一旦你的窗體包含了50個(或更多)的控制項,閃爍的問題就出現了。窗體類首先繪製背景色,打個比方,每個控制項的背景色都形容為乙個「坑」,那麼當你使用透明色或者繼承父類選項時,每個洞首先被繪製成白色,黑色,然後每個控制項前景色被繪製(填坑),表面上看非常醜,並且沒有現成的解決方案,doublebuffering也無法解決大量的控制項閃爍問題。

在sdk標頭檔案中有這樣乙個windows樣式:ws_ex_composited,這個樣式可使windows forms啟用雙緩衝於所有窗體以及其子控制項,當然也就解決了上述問題。

C winform介面的語言切換

if file.exists xmlpath 不存在xml檔案,建立檔案並寫入根節點 xmldocument xmldoc new xmldocument xmldoc.load xmlpath xmlnode xmlnode xmldoc.getelementbyid form.name if x...

C winform介面的語言切換

if file.exists xmlpath 不存在xml檔案,建立檔案並寫入根節點 xmldocument xmldoc new xmldocument xmldoc.load xmlpath xmlnode xmlnode xmldoc.getelementbyid form.name if x...

C Winform頻繁重新整理導致介面閃爍解決方法

一 通過對窗體和控制項使用雙緩衝來減少圖形閃爍 當繪製時出現閃爍時,使用雙緩衝 對於大多數應用程式,net framework 提供的預設雙緩衝將提供最佳效果。預設情況下,標準 windows 窗體控制項是雙緩衝的。可以通過兩種方法對窗體和所創作的控制項啟用預設雙緩衝。一種方法是將 doublebu...