protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } }
接着找辦法解決500多個控件PAINT緩慢的效能問題,心塞。
分類都不想分了,就這樣。ide
--update 2014/7/14佈局
CreateParams,xp下,cpu會滿負荷。spa
--update 2014/7/15操作系統
1. 重載CreateParams能讓控件重繪提速。因此然待究。然,Vista如下操做系統會出現CPU滿載。所以code
protected override CreateParams CreateParams { get { if( Environment.OSVersion.Version.Major >= 6 ) { // Vista以上 CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } else { return base.CreateParams; } } }
2. 控件們從新佈局的時候比較討厭,若是嵌套層數不少,西夏普必須將每一個控件掛起,suspendLayout,一個簡便的方法是用API直接給最外層髮禁止繪製,和取消禁止繪製,而後手動refresh。手動,固然是碼動的意思。blog
[System.Runtime.InteropServices.DllImport( "user32" )] private static extern int SendMessage( IntPtr hwnd, int wMsg, int wParam, IntPtr lParam ); private const int WM_SETREDRAW = 0xB; private void RefreshYourCtrl() { SendMessage( yourCtrl.Handle, WM_SETREDRAW, 0, IntPtr.Zero );//禁止重繪 // 從新佈局 SendMessage( yourCtrl.Handle, WM_SETREDRAW, 1, IntPtr.Zero );//取消禁止 yourCtrl.Refresh(); }
3. 雙緩衝對多控件多嵌套基本沒啥效果。get
仍是API好使。io