C# 控件雙緩沖控制 ControlStyles 枚舉詳解


ControlStyles 枚舉
.NET Framework 4
   

指定控件的樣式和行為。

此枚舉有一個 FlagsAttribute 特性,通過該特性可使其成員值按位組合。

 

命名空間:   System.Windows.Forms
程序集:  System.Windows.Forms(在 System.Windows.Forms.dll 中)
C#  
[FlagsAttribute]
public enum ControlStyles
成員名稱 說明
ContainerControl 如果為 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 方法。 此樣式默認為false。 EnableNotifyMessage 在部分可信的情況下不工作。
DoubleBuffer 如果為 true,則繪制在緩沖區中進行,完成后將結果輸出到屏幕上。 雙重緩沖區可防止由控件重繪引起的閃爍。 如果將 DoubleBuffer 設置為 true,則還應當將 UserPaint 和 AllPaintingInWmPaint 設置為true。
OptimizedDoubleBuffer 如果為 true,則該控件首先在緩沖區中繪制,而不是直接繪制到屏幕上,這樣可以減少閃爍。 如果將此屬性設置為 true,則還應當將 AllPaintingInWmPaint 設置為 true。
UseTextForAccessibility 指定該控件的 Text 屬性的值,如果已設置,則可確定該控件的默認 Active Accessibility 名稱和快捷鍵。

控件在各種屬性和方法中使用此枚舉指定功能。 控件可以通過調用 SetStyle 方法並傳入適當的 ControlStyles 位以及設置該位的 Boolean 值來啟用樣式。 例如,下面的一行 Visual Basic 代碼將會啟用雙重緩沖。

 myControl.SetStyle(UserPaint Or AllPaintingInWmPaint Or DoubleBuffer, True)

如果將 AllPaintingInWmPaint 位設置為 true,則將忽略 WM_ERASEBKGND 窗口消息,而直接從 WM_PAINT 窗口消息調用OnPaintBackground 和 OnPaint 方法。 這通常可減少閃爍,除非其他控件將 WM_ERASEBKGND 窗口消息發送到該控件。 可以發送 WM_ERASEBKGRND 窗口消息以達到與 SupportsTransparentBackColor 相似的假透明效果;例如,具有平面外觀的 ToolBar 就采用這種方法。

若要完全啟用雙緩沖,可以將 OptimizedDoubleBuffer 和 AllPaintingInWmPaint 位設置為 true。 但是,啟用雙緩沖的首選方法是將該控件的DoubleBuffered 屬性設置為 true,這會產生同樣的結果。

如果 SupportsTransparentBackColor 位設置為 true,並且 BackColor 被設置為 alpha 組件小於 255 的顏色,則 OnPaintBackground 將通過請求其父控件繪制背景來模擬透明。 但這不是真正的透明。

注意注意

如果在控件與其父控件之間還有另一個控件,則當前控件不會顯示中間的控件。

當 UserMouse 位設置為 true 時,仍將調用以下方法:Control.OnMouseDownControl.OnMouseUpControl.OnMouseEnterControl.OnMouseMoveControl.OnMouseHoverControl.OnMouseLeave 和 Control.OnMouseWheel

單擊控件時,如果 StandardClick 位設置為 true,則 Control.OnClick 方法被調用,它將引發 Control.Click 事件。 雙擊控件並且StandardClick 和 StandardDoubleClick 位都設置為 true 時,會將此次單擊傳遞給 DoubleClick 事件。 隨后,Control.OnDoubleClick 方法被調用,此方法將引發 Control.DoubleClick 事件。 然而,無論 StandardClick 和 StandardDoubleClick 位為何值,控件都可直接調用 OnClick或 OnDoubleClick。 有關控件單擊和雙擊行為的更多信息,請參見 Control.Click 和 Control.DoubleClick 這兩個主題。

當已設置 UseTextForAccessibility 位和該控件的 Text 屬性值時,該控件的 Text 屬性值可確定控件的默認的 Active Accessibility 名稱和快捷鍵。 否則,將改用前面的 Label 控件的文本。 此樣式為默認設置。 某些內置控件類型(如 TextBox 和 ComboBox)會重置此樣式,因此 Active Accessibility 不會使用那些控件的 Text 屬性。

對繼承者的說明

如果該控件不支持 Click 或 DoubleClick 事件,那么從標准 Windows 窗體控件繼承並將 StandardClick 或 StandardDoubleClick 位值更改為true 會導致意外的行為,或者根本不會產生任何效果。

下面的示例演示如何通過 StyleChanged 事件使用 ControlStyles。

C#
// Set the 'FixedHeight' and 'FixedWidth' styles to false.
private void MyForm_Load(object sender, EventArgs e)
{
   this.SetStyle(ControlStyles.FixedHeight, false);
   this.SetStyle(ControlStyles.FixedWidth, false);
}

private void RegisterEventHandler()
{
   this.StyleChanged += new EventHandler(MyForm_StyleChanged);
}

// Handle the 'StyleChanged' event for the 'Form'.
private void MyForm_StyleChanged(object sender, EventArgs e)
{
   MessageBox.Show("The style releated to the 'Form' has been changed");
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM