警告 设置控件样式位能够充分地更改控件行为。查看 ControlStyles 枚举文档可以了解在调用 SetStyle 方法之前更改控件样式位产生的影响。
示例
[Visual Basic, C#, C++] 下面的示例启用 Form 上的双重缓冲并更新样式以反映所做的修改。
[Visual Basic]
Public Sub EnableDoubleBuffering()
' Set the value of the double-buffering style bits to true.
Me.SetStyle(ControlStyles.DoubleBuffer _
Or ControlStyles.UserPaint _
Or ControlStyles.AllPaintingInWmPaint, _
True)
Me.UpdateStyles()
End Sub
相关内容可以参照:ControlStyles 枚举
备注
控件在各种属性和方法中使用此枚举指定功能。控件可以通过调用 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 就采用这种方法。
若要完全启用双重缓冲,必须将 UserPaint、AllPaintingInWmPaint 和 DoubleBuffer 位设置为 true。
如果 SupportsTransparentBackColor 位设置为 true,并且 BackColor 被设置为 alpha 组件小于 255 的颜色,则 OnPaintBackground 将通过请求其父控件绘制背景来模拟透明。但这不是真正的透明。
注意 如果在控件与其父控件之间还有另一个控件,则当前控件不会显示中间的控件。
当 UserMouse 位设置为 true 时,仍将调用以下方法:Control.OnMouseDown、Control.OnMouseUp、Control.OnMouseEnter、Control.OnMouseMove、Control.OnMouseHover、Control.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 这两个主题。
对继承者的说明: 如果该控件不支持 Click 或 DoubleClick 事件,那么从标准 Windows 窗体控件继承并将 StandardClick 或 StandardDoubleClick 位值更改为 true 会导致意外的行为,或者根本不会产生任何效果。
成员
成员名称 | 说明 | 值 |
---|---|---|
AllPaintingInWmPaint | 如果为 true,控件将忽略 WM_ERASEBKGND 窗口消息以减少闪烁。仅当 UserPaint 位设置为 true 时,才应当应用该样式。 | 8192 |
CacheText | 如果为 true,控件保留文本的副本,而不是在每次需要时从 Handle 获取文本副本。此样式默认为 false。此行为提高了性能,但使保持文本同步变得困难。 | 16384 |
ContainerControl | 如果为 true,则控件是类似容器的控件。 | 1 |
DoubleBuffer | 如果为 true,则绘制在缓冲区中进行,完成后将结果输出到屏幕上。双重缓冲区可防止由控件重绘引起的闪烁。要完全启用双重缓冲,还必须将 UserPaint 和 AllPaintingInWmPaint 样式位设置为 true。 | 65536 |
EnableNotifyMessage | 如果为 true,则为发送到控件的 WndProc 的每条消息调用 OnNotifyMessage 方法。此样式默认为 false。 | 32768 |
FixedHeight | 如果为 true,则自动缩放时,控件具有固定宽度。例如,如果布局操作试图重新调节控件以容纳新的 Font,则控件的 Width 将保持不变。 | 64 |
FixedWidth | 如果为 true,则自动缩放时,控件具有固定高度。例如,如果布局操作试图重新缩放控件以适应新的 Font,则控件的 Height 将保持不变。 | 32 |
Opaque | 如果为 true,则控件被绘制为不透明的,不绘制背景。 | 4 |
ResizeRedraw | 如果为 true,则在调整控件大小时重绘控件。 | 16 |
Selectable | 如果为 true,则控件可以接收焦点。 | 512 |
StandardClick | 如果 true,则控件将实现标准 Click 行为。 | 256 |
StandardDoubleClick | 如果为 true,则控件将实现标准 DoubleClick 行为。如果 StandardClick 位未设置为 true,则忽略此样式。 | 4096 |
SupportsTransparentBackColor | 如果为 true,控件接受 alpha 组件小于 255 的 BackColor 以模拟透明。仅在 UserPaint 位设置为 true 并且父控件派生自 Control 时才模拟透明。 | 2048 |
UserMouse | 如果为 true,则控件完成自己的鼠标处理,因而鼠标事件不由操作系统处理。 | 1024 |
UserPaint | 如果为 true,控件将自行绘制,而不是通过操作系统来绘制。此样式仅适用于派生自 Control 的类。 | 2 |