這段是放在在父視窗,主要消除在對內部視窗移除再添加產生的閃爍問題
但是加了這段后,閃爍是解決了。但子視窗有個picturebox,獲取Graphics,在上面繪圖時失效,畫不出來,不加之前是可以的。
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
uj5u.com熱心網友回復:
呃呃 幫你頂一下帖子。我之前有一個想優化的地方是對一個Form使用了CreateParams之后(因為這個表單的繪制是用很多控制元件組成的,不快取的話拖動滾動條快一點的話就會有拖影),要是在它的旁邊以Tab標簽頁的形式打開另一個子表單A,然后再回傳使用了CreateParams的Form,那么該Form就不會正常顯示了,而是變成了A。暫時還沒優化這個地方,后面再說,目前能用吧。uj5u.com熱心網友回復:
這個東西用起來有隱患的,可能會有奇奇怪怪的bug出現,我現在一般都不使用移除和添加,都是隱藏和顯示。如果硬性需求那確實沒辦法。只是這段代碼用起來會有很奇怪的BUG出現,我發過蠻多帖子的問題都是這段代碼引起的。。。后來我把這段代碼刪了,然后盡量不去洗掉添加表單。至于這段代碼到底是和原理我至今還不清楚,希望有大神講解一下
uj5u.com熱心網友回復:
對的,其實關于winform的開發,一個經常遇到的問題就是閃爍了,這個時候我們大可使用變通的方法,比如:是否不必每次都close然后再new一個新Form,是否可以記憶體常駐一個Form,而只是重新加載它上面的資料。我做幾個月winform開發的一個感悟就是:當思維進入死角時,換個變通的方法,當你這樣想之后,往往會找到替代的解決方法。uj5u.com熱心網友回復:
你可以去看下windows Api ,cp.ExStyle |= 0x02000000 這個值有強制性對所有父子后代控制元件緩沖的效果,無法搞特殊性....
uj5u.com熱心網友回復:
暫時就是不整體Dispose組件,對TabPage單獨remove,效果有明顯提升,這都看具體場景,假設切換的tabpage沒有一個復用,都要remove重加載,還是逃不了閃爍的問題
uj5u.com熱心網友回復:
我可以告訴你這個東西有一個很變態的BUG,我是用的tabcontrol控制元件,xp和win7、win10的系統下所展現的效果不同,導致我在tabpage中使用datagridview控制元件的時候,切換tabpage頁面(不重新創建表單,僅重繪資料),然后datagridview控制元件表格的單元格分割線會穿透出其他頁面的控制元件。然后還有就是會導致某些表單中的textbox和combox全部為選中狀態(但是實際上沒有一個textbox、combobox控制元件有獲取焦點),就這些BUG搞得我焦頭爛額。。。后來我嘗試洗掉一些代碼才發現是這串代碼的問題,我不知道別人會不會遇到。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/32894.html
標籤:組件/控件開發
