控件样式位标志 位作用

控件样式位标志用于对支持的行为进行分类。控件可以通过调用 SetStyle 方法并传入适当的 ControlStyles 位以及设置该位的 Boolean 值来启用样式。若要确定分配给指定的 ControlStyles 位的值,请使用 GetStyle 方法并传入要计算的 ControlStyles 成员。
警告   设置控件样式位能够充分地更改控件行为。查看 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 就采用这种方法。

若要完全启用双重缓冲,必须将 UserPaintAllPaintingInWmPaintDoubleBuffer 位设置为 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 事件。双击控件并且 StandardClickStandardDoubleClick 位都设置为 true 时,会将此次单击传递给 DoubleClick 事件。随后,Control.OnDoubleClick 方法被调用,此方法将引发 Control.DoubleClick 事件。然而,无论 StandardClickStandardDoubleClick 位为何值,控件都可直接调用 OnClickOnDoubleClick。有关控件单击和双击行为的更多信息,请参见 Control.ClickControl.DoubleClick 这两个主题。

对继承者的说明:  如果该控件不支持 ClickDoubleClick 事件,那么从标准 Windows 窗体控件继承并将 StandardClickStandardDoubleClick 位值更改为 true 会导致意外的行为,或者根本不会产生任何效果。

成员
成员名称说明
AllPaintingInWmPaint如果为 true,控件将忽略 WM_ERASEBKGND 窗口消息以减少闪烁。仅当 UserPaint 位设置为 true 时,才应当应用该样式。8192
CacheText如果为 true,控件保留文本的副本,而不是在每次需要时从 Handle 获取文本副本。此样式默认为 false。此行为提高了性能,但使保持文本同步变得困难。16384
ContainerControl如果为 true,则控件是类似容器的控件。1
DoubleBuffer如果为 true,则绘制在缓冲区中进行,完成后将结果输出到屏幕上。双重缓冲区可防止由控件重绘引起的闪烁。要完全启用双重缓冲,还必须将 UserPaintAllPaintingInWmPaint 样式位设置为 true65536
EnableNotifyMessage如果为 true,则为发送到控件的 WndProc 的每条消息调用 OnNotifyMessage 方法。此样式默认为 false32768
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
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值