winform載入多個自定義控制項時,會出現很嚴重的閃爍問題,很卡,一塊一塊的載入(像開啟網頁時,網路很卡的那種感覺)簡直沒法忍受。
在網上搜尋了好久,網上大部分的方法是一下4種,但是都不能有效的解決問題。
1.將doublebuffered 設定 true,用雙快取處理form介面內容載入,可以提高頁面顯示質量。或者
setstyle(controlstyles.userpaint | controlstyles.allpaintinginwmpaint | controlstyles.optimizeddoublebuffer, true引數說明:);this.updatestyles();
userpaint
如果為 true,控制項將自行繪製,而不是通過作業系統來繪製。此樣式僅適用於派生自 control 的類。
allpaintinginwmpaint
如果為 true,控制項將忽略 wm_erasebkgnd 視窗訊息以減少閃爍。僅當 userpaint 位設定為 true 時,才應當應用該樣式。
doublebuffer
如果為 true,則繪製在緩衝區中進行,完成後將結果輸出到螢幕上。雙重緩衝區可防止由控制項重繪引起的閃爍。要完全啟用雙重緩衝,還必須將 userpaint 和 allpaintinginwmpaint 樣式位設定為 true。
2.把構造方法裡的內容盡量移動到form_load事件裡處理。
3.把控制項繪製的pint()寫到一起繪製。
4.在控制項使用後有變化時可以採用先 掛起 再顯示的方法,提高顯示質量。
this你只有試了你就會發現,以上這幾種辦法並不能解決問題。.tablelayoutpanel2.suspendlayout();
2this
.suspendlayout();
3tablelayoutpanel2.controls.clear();
45 tablelayoutpanel2.columncount =value.columncount;
6tablelayoutpanel2.columnstyles.clear();
7for (int i = 0; i < this.tablelayoutpanel2.columncount; i++)
1011
this.tablelayoutpanel2.rowcount = value.reservedcount /value.columncount;
12tablelayoutpanel2.rowstyles.clear();
13for (int i = 0; i < tablelayoutpanel2.rowcount; i++)
1617
//動態新增控制項
18//
在這兒新增你的**
19...
2021
22 tablelayoutpanel2.resumelayout(true
);23
this.resumelayout(true
);
解決辦法:
在呼叫自定義控制項的窗體內新增的:
1在自定義控制項中新增的:protected
override
createparams createparams
29 }
protectedoverride
createparams createparams
}
C winform 窗體自定義
今天看了篇技術帖,原來是可以不通過工具欄的現有工具進行布局的。以前 當我要有2個窗體的時候,就會拖拽2個 然後進行編輯。現在才明白,只要寫成類也是可以使用的。開啟乙個窗體的檔案,發現當自動新建個窗體時,其實是系統幫忙做了很多的準備工作。例如designer.cs中就有 initializecompo...
C WinForm 使用者自定義控制項閃爍的問題
使用winform開發,當使用了大量的使用者自定義控制項usercontrol時,介面拖動或切換時就會出現閃爍的問題。解決方法主要就是重寫usercontrol和form的createparams方法。前端呼叫usercontrol的窗體form這樣寫 protected override crea...
自定義控制項 可以動態載入使用者控制項
自定義控制項中動態載入使用者控制項 自己寫個自定義控制項,如 要想每次使用containers時就自動有頁首和頁尾,一種方法就是在在做containers的時候自己在裡面加html元素。但是這中方法麻煩,也不容 易便於以後的修改。所以就把頁首和頁尾分別做成兩個使用者控制項 header.ascx,f...