1. 程式人生 > >winform 雙緩衝技術解決閃碩

winform 雙緩衝技術解決閃碩

專案中,控制元件在大小變化時會有閃爍現象。

以雙緩衝技術解決。

            this.SetStyle(ControlStyles.OptimizedDoubleBuffer
                       | ControlStyles.ResizeRedraw
                       | ControlStyles.Selectable
                       | ControlStyles.AllPaintingInWmPaint
                       | ControlStyles.UserPaint
                       | ControlStyles.SupportsTransparentBackColor,
                     true);

或:

            this.SetStyle(ControlStyles.UserPaint, true);//自繪
            this.SetStyle(ControlStyles.DoubleBuffer, true);// 雙緩衝
            this.SetStyle(ControlStyles.ResizeRedraw, true);//調整大小時重繪
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);// 雙緩衝
            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);   //透明效果
      

成員名稱           說明
UserPaint 如果為 true,控制元件將自行繪製,而不是通過作業系統來繪製。如果為 false,將不會引發 Paint事件。此樣式僅適用於派生自 Control 的類。
Opaque 如果為 true,則控制元件被繪製為不透明的,不繪製背景。
ResizeRedraw 如果為 true,則在調整控制元件大小時重繪控制元件。
FixedWidth 如果為 true,則自動縮放時,控制元件具有固定寬度。例如,如果佈局操作試圖重新縮放控制元件以適應新的 Font,則控制元件的 Width 將保持不變。
FixedHeight
如果為 true,則自動縮放時,控制元件具有固定高度。例如,如果佈局操作試圖重新縮放控制元件以適應新的 Font,則控制元件的 Height 將保持不變。
StandardClick 如果為 true,則控制元件將實現標準 Click 行為。
Selectable 如果為 true,則控制元件可以接收焦點。
UserMouse 如果為 true,則控制元件完成自己的滑鼠處理,因而滑鼠事件不由作業系統處理。
SupportsTransparentBackColor 如果為 true,控制元件接受 alpha 元件小於 255 的 BackColor 以模擬透明。僅在 UserPaint 位設定為 true 並且父控制元件派生自 Control 時才模擬透明。
StandardDoubleClick 如果為 true,則控制元件將實現標準 DoubleClick 行為。如果 StandardClick 位未設定為true,則忽略此樣式。
AllPaintingInWmPaint 如果為 true,控制元件將忽略 WM_ERASEBKGND 視窗訊息以減少閃爍。僅當 UserPaint 位設定為 true 時,才應當應用該樣式。
CacheText 如果為 true,控制元件保留文字的副本,而不是在每次需要時從 Handle 獲取文字副本。此樣式預設為 false。此行為提高了效能,但使保持文字同步變得困難。
EnableNotifyMessage 如果為 true,則為傳送到控制元件的 WndProc 的每條訊息呼叫 OnNotifyMessage 方法。此樣式預設為 falseEnableNotifyMessage 在部分可信的情況下不工作。
DoubleBuffer 如果為 true,則繪製在緩衝區中進行,完成後將結果輸出到螢幕上。雙重緩衝區可防止由控制元件重繪引起的閃爍。如果將 DoubleBuffer 設定為 true,則還應當將 UserPaint 和AllPaintingInWmPaint 設定為 true
OptimizedDoubleBuffer 如果為 true,則該控制元件首先在緩衝區中繪製,而不是直接繪製到螢幕上,這樣可以減少閃爍。如果將此屬性設定為 true,則還應當將 AllPaintingInWmPaint 設定為 true
UseTextForAccessibility 指定該控制元件的 Text 屬性的值,如果已設定,則可確定該控制元件的預設 Active Accessibility 名稱和快捷鍵。