控件样式位标志 位作用
2005-01-21 14:06
399 查看
控件样式位标志用于对支持的行为进行分类。控件可以通过调用 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 枚举
如果将 AllPaintingInWmPaint 位设置为 true,则将忽略 WM_ERASEBKGND 窗口消息,而直接从 WM_PAINT 窗口消息调用 OnPaintBackground 和 OnPaint 方法。这通常可减少闪烁,除非其他控件将 WM_ERASEBKGND 窗口消息发送到该控件。可以发送 WM_ERASEBKGRND 窗口消息以达到与 SupportsTransparentBackColor 相似的假透明效果;例如,具有平面外观的 ToolBar 就采用这种方法。
若要完全启用双重缓冲,必须将 UserPaint、AllPaintingInWmPaint 和 DoubleBuffer 位设置为 true。
如果 SupportsTransparentBackColor 位设置为 true,并且 BackColor 被设置为 alpha 组件小于 255 的颜色,则 OnPaintBackground 将通过请求其父控件绘制背景来模拟透明。但这不是真正的透明。
注意[/b] 如果在控件与其父控件之间还有另一个控件,则当前控件不会显示中间的控件。
当 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 这两个主题。
对继承者的说明: [/b] 如果该控件不支持 Click 或 DoubleClick 事件,那么从标准 Windows 窗体控件继承并将 StandardClick 或 StandardDoubleClick 位值更改为 true 会导致意外的行为,或者根本不会产生任何效果。
警告 设置控件样式位能够充分地更改控件行为。查看 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 将通过请求其父控件绘制背景来模拟透明。但这不是真正的透明。
注意[/b] 如果在控件与其父控件之间还有另一个控件,则当前控件不会显示中间的控件。
当 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 这两个主题。
对继承者的说明: [/b] 如果该控件不支持 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 |
相关文章推荐
- 在Repeater控件中使用if语句判断前4条数据 和后面数据样式 不同 并且对4求余的样式又是一种 老是出错
- 在Repeater控件中通过Eval的方式绑定Style样式代码
- C#.net 地图控件开发(七) 地图符号,几何图形样式Symbol
- 纯CSS设置Checkbox复选框控件的样式
- WPF:DataTemplateSelector设置控件不同的样式
- 在Repeater控件中通过Eval的方式绑定Style样式代码
- DropDownList标志控件的学习
- Windows常见窗口样式和控件风格
- ExtJS控件样式的修改(示例无边框panel)
- 笔记本样式的EditText控件(每行均带下划虚线)
- html 素材表(模板、日期控件、对话框样式、 翻页 、框架)
- asp.net为前台Runat="server"控件设置样式和添加属性
- Android控件样式美化之shape的使用
- 自定义NumberPicker修改样式、时间控件
- 一步一步学Silverlight 2系列(8):使用样式封装控件观感 (转)
- sencha-touch 动态改变某个控件样式
- 如何给telerik的控件应用样式Theming
- AspNetPager分页控件定义及应用样式示例介绍
- Windows常见窗口样式和控件风格
- 修改页面中所有TextBox控件的样式--CSS