C# 解決winform介面閃屏問題及弊端
阿新 • • 發佈:2019-01-01
1 新增以下程式碼:
- // 防止閃屏
- protectedoverride CreateParams CreateParams
- {
- get
- {
- CreateParams cp = base.CreateParams;
- cp.ExStyle |= 0x02000000;
- return cp;
- }
- }
經驗總結:
1 如果使用此程式碼了,且部分介面不能顯示,就是此程式碼造成的
a 我在一個介面上用了3個panel,並且每個panel顯示編碼器的影象,介面切換時發現只有三個panel影象,其他都不見了,
我把這個程式碼去掉後就顯示正常了,具體什麼原因就不知道了。
b 有一次我給form添加了個背景圖片,切換了幾次背景不見了,去掉程式碼就好了。
多做單元測試,將功能在demo裡測試,demo裡不需要加什麼雙緩衝等等,如果demo裡有問題,那麼就是功能問題了。
2016-8-18 新增, 下面也可以解決雙緩衝,暫時沒發現什麼問題,但是需要單獨對每個控制元件進行設定緩衝
- publicstaticvoid SetDouble(Control cc)
- {
- cc.GetType().GetProperty("DoubleBuffered", System.Reflection.BindingFlags.Instance |
- System.Reflection.BindingFlags.NonPublic).SetValue(cc, true, null);
- }
- SetDouble(this);
- SetDouble(label1);
也可以試一下這個程式碼
- protectedoverridevoid WndProc(ref Message m)
- {
- if (m.Msg == 0x0014) // 禁掉清除背景訊息
- return;
- base.WndProc(ref m);
- }