Label 类
Label是一个无窗口轻量级控件,用于显示只读文本。标签通常用作输入控件旁边的静态标题("姓名:"、"邮箱:"),由代码保持更新的状态显示,或作为键盘助记锚点将Alt+按键路由到下一个可聚焦控件。因为Label没有自己的hWnd,所以比配置为只读的TextBox开销小得多——但它在键盘意义上也是非交互的:不能获取焦点、引发键事件或通过TAB键选择。
Private Sub Form_Load()
lblName.Caption = "&Name:" ' Alt+N将焦点转发到下一个控件
lblName.AutoSize = True
txtName.Text = "" ' 接收Alt+N的TextBox
End Sub
Private Sub Timer1_Timer()
lblClock.Caption = Format$(Now, "hh:mm:ss")
End Sub无窗口渲染
与Image一样,Label没有hWnd。框架在父控件的绘制周期中将其直接绘制到父控件的绘图表面上。权衡是相同的:
- 无焦点、无键盘输入、无
KeyDown/KeyPress/KeyUp/GotFocus/LostFocus/Validate。 - 无
hWnd可传递给API函数,无SetFocus。 - 不能承载子控件。
对于用户可编辑(或需要获取焦点)的文本,改用Locked = True的TextBox。
助记符和访问键
标签本身不获取焦点,但参与键盘助记符路由。当UseMnemonic为True(默认)时,Caption中的&符号将下一个字符标记为助记符——按Alt+该字符将焦点移到标签之后按TAB顺序的下一个可聚焦控件。使用&&显示字面&符号。将UseMnemonic设置为False可禁用特殊处理并按原样渲染&符号。
lblName.Caption = "&Name:" ' Alt+N → 下一个控件(通常是txtName)
lblHelp.Caption = "Use && to escape" ' 显示为: Use & to escape约定是将Label在TAB顺序中紧接在其标题的控件之前,这样助记符自然指向该控件。
Caption布局
Alignment和VerticalAlignment共同定位标签矩形内的标题:
| 属性 | 成员 |
|---|---|
| Alignment | vbLeftJustify (0,默认)、vbRightJustify (1)、vbCenter (2) |
| VerticalAlignment | vbVerticalAlignTop (0,默认)、vbVerticalAlignMiddle (1)、vbVerticalAlignBottom (2) |
WordWrap为True时,当标题否则会超出Width时在空白处将标题分成多行。LineSpacing在行间插入额外的垂直间距(以缇为单位)。
AutoSize为True时,每当标题、字体、边框或自动换行设置更改时,标签会重新调整大小以适应其标题。自动调整大小在父控件的设备上下文中测量当前字体,因此在高DPI显示器上产生正确结果。当AutoSize为False时,标题被裁剪到标签的矩形内(仍遵循WordWrap和对齐设置)。
旋转
Angle以度为单位逆时针绕控件矩形左上角旋转渲染的标题。0为自然方向,90为逆时针四分之一转,以此类推。控件的边界矩形不变——因此大旋转角度可能将可见文本推到矩形之外。Click和鼠标事件的点击测试仍使用未旋转的矩形。
边框样式
BorderStyle在三种样式之间选择:
| 常量 | 值 | 描述 |
|---|---|---|
| vbNoBorder | 0 | 无边框(默认)。 |
| vbFixedSingleBorder | 1 | 凹陷的Win32风格边框。Appearance选择3D或平面。 |
| vbCustomBorder | 2 | 通过BorderCustomOptions配置的逐边自定义边框。 |
使用vbCustomBorder时,BorderCustomOptions返回一个对象,其.Left、.Top、.Right和.Bottom属性各自有独立的Size(线粗,以缇为单位)、Padding(边框与标题之间的内边距,以缇为单位)和Color值:
lblBox.BorderStyle = vbCustomBorder
With lblBox.BorderCustomOptions
.Top.Size = 30 : .Top.Color = vbRed : .Top.Padding = 60
.Bottom.Size = 30 : .Bottom.Color = vbRed : .Bottom.Padding = 60
End With背景
BackStyle在vbBFOpaque(默认——在标题下绘制BackColor)和vbBFTransparent(不绘制背景——父控件绘制的内容会透过来)之间选择。在PictureBox、Image或自定义绘制的窗体背景上叠加标题时,透明标签是必不可少的。在报表模式下创建的新标签默认为vbBFTransparent。
数据绑定
设置DataSource和DataField将Caption连接到Data控件记录集的字段。每次移动时绑定字段作为字符串读取,对Caption赋值会将记录集标记为已修改。DataFieldAggregate和DataFieldAggregateValue由报表引擎用于显示运行汇总。
属性
Alignment
Caption在标签矩形内的水平放置。AlignmentConstants的成员:vbLeftJustify (0,默认)、vbRightJustify (1)或vbCenter (2)。
Anchors
标签的对应边缘跟随父控件调整大小时所依据的父控件边缘集合。只读——通过返回的Anchors对象分配单独的.Left、.Top、.Right、.Bottom标志。
Angle
渲染标题的旋转角度,以度为单位,逆时针绕控件矩形左上角旋转。Double,默认0。
Appearance
边框的样式,AppearanceConstants的成员:vbAppearFlat或vbAppear3d(默认)。仅在BorderStyle为vbFixedSingleBorder时有意义。
AutoSize
标签是否重新调整大小以适应其Caption、Font、边框和自动换行设置。Boolean,默认False。当为True时,每当这些输入中的任何一个更改时都会重新调整大小。
BackColor
当BackStyle为vbBFOpaque时绘制在标题后面的颜色。OLE_COLOR,默认为系统3D面色。
BackStyle
标签是否绘制背景。BackFillStyleConstants的成员:vbBFOpaque (1,默认——绘制BackColor)或vbBFTransparent (0——让父控件绘制的内容透过来)。
BorderCustomOptions
vbCustomBorder样式的逐边配置。只读;返回的对象公开.Left、.Top、.Right、.Bottom子对象,每个都有Size、Padding和Color属性。参见边框样式。
BorderStyle
标签周围绘制的边框样式。ControlBorderStyleConstantsCustom的成员:vbNoBorder (0,默认)、vbFixedSingleBorder (1)或vbCustomBorder (2)。参见边框样式。
Caption
标签渲染的文本。String。默认属性。
语法:object.Caption [ = string ]
当UseMnemonic为True时,&符号将下一个字符标记为助记符;&&产生字面&符号。赋值与当前值不同的值会引发Change事件;赋值当前值为静默空操作。
Container
承载此标签的控件——通常是窗体、Frame或UserControl。使用Get读取,使用Set更改。
ControlType
只读的ControlTypeConstants值,将此控件标识为标签。始终为vbLabel。
DataChanged
绑定的Caption自上次保存或从DataSource刷新以来是否已被写入。Boolean。设置DataChanged = True也会将绑定记录集标记为已修改。
DataField
绑定DataSource记录集中由Caption镜像的字段名称。String。
DataFieldAggregate
报表引擎应累积到DataFieldAggregateValue中的运行聚合类型。Label.AggregateConstants的成员:
| 常量 | 值 | 描述 |
|---|---|---|
| vbAggregateNone | 0 | 无聚合(默认)。 |
| vbAggregateSum | 1 | 对报表访问的行中的绑定数值求和。 |
仅在标签在Report节中渲染时使用。
DataFieldAggregateValue
报表引擎计算的累积聚合值,公开为Decimal。在生成报表时由引擎更新;用户代码可从事件处理程序中读取但通常不写入。
DataFormat
INFO
保留用于与VB6兼容;目前在twinBASIC中未实现。
DataMember
INFO
保留用于与VB6兼容;目前在twinBASIC中未实现。
DataSource
对Data控件(或其他DataSource提供程序)的引用,其记录集为DataField提供值。使用Set设置。
Dock
标签在其容器中的停靠位置。DockModeConstants的成员:vbDockNone(默认)、vbDockLeft、vbDockTop、vbDockRight、vbDockBottom或vbDockFill。停靠标签忽略Anchors。
DragIcon
控件被拖放时用作鼠标光标的StdPicture(参见Drag和DragMode)。
DragMode
控件是否应在用户按住鼠标时自动拖动。DragModeConstants的成员:vbManual (0,默认——从代码调用Drag)或vbAutomatic (1)。
Enabled
标签是否接受鼠标输入并以正常文本颜色渲染Caption。禁用的标签仍会绘制,但使用系统灰色文本色并忽略鼠标事件。Boolean,默认True。
Font
用于渲染Caption的StdFont。便捷属性FontBold、FontItalic、FontName、FontSize、FontStrikethru和FontUnderline读写此对象的相应成员。默认为Segoe UI, 8磅。
FontBold
Font.Bold的快捷方式。Boolean。
FontItalic
Font.Italic的快捷方式。Boolean。
FontName
Font.Name的快捷方式。String,默认"Segoe UI"。
FontSize
Font.Size的快捷方式。Single,以磅为单位。默认8。
FontStrikethru
Font.Strikethrough的快捷方式。Boolean。
FontUnderline
Font.Underline的快捷方式。Boolean。
ForeColor
Caption的文本颜色,类型为OLE_COLOR。默认为系统按钮文本色。当Enabled为False时替换为系统灰色文本色。
Height
控件的高度,默认以缇为单位(或使用容器的ScaleMode单位)。Double。当AutoSize为True时自动计算。
Index
当标签是控件数组的一部分时,此实例在数组中的从零开始的Long索引。在非数组实例上读取Index会引发运行时错误343(Object not an array)。运行时只读。
Left
从容器的左边缘到标签左边缘的水平距离。Double。
LineSpacing
在自动换行或多行标题的行间插入的额外垂直间距,以缇为单位。Long,默认0。
LinkItem
INFO
保留用于与VB6的DDE功能兼容;目前在twinBASIC中未实现。
LinkMode
INFO
保留用于与VB6的DDE功能兼容;目前在twinBASIC中未实现。
LinkTimeout
INFO
保留用于与VB6的DDE功能兼容;目前在twinBASIC中未实现。
LinkTopic
INFO
保留用于与VB6的DDE功能兼容;目前在twinBASIC中未实现。
MouseIcon
当MousePointer为vbCustom且指针位于控件上时用作鼠标光标的StdPicture。
MousePointer
指针位于控件上时显示的鼠标光标。MousePointerConstants的成员。
Name
控件在其父窗体上的唯一设计时名称。运行时只读。
OLEDropMode
标签如何响应OLE放置。OLEDropConstants的受限成员:vbOLEDropNone (0,默认)或vbOLEDropManual (1)。Label不支持自动放置;赋值vbOLEDropAutomatic会引发运行时错误5(Invalid procedure call or argument)。
Parent
对最终包含此控件的Form(或UserControl)的引用。只读。
RightToLeft
INFO
保留用于与VB6兼容;目前在twinBASIC中未实现。使用Alignment的vbRightJustify来右对齐标题。
TabIndex
INFO
保留用于与VB6兼容;目前在twinBASIC中未实现。标签不可聚焦,因此该值仅影响助记符路由——目前由设计时Z顺序控制。
Tag
应用程序可用于将自定义数据与控件关联的自由格式String。框架忽略此属性。
ToolTipText
当用户将鼠标悬停在标签上时作为工具提示显示的多行String。
Top
从容器顶部到标签顶部的垂直距离。Double。
UseMnemonic
Caption中的&是否将下一个字符标记为键盘助记符。Boolean,默认True。为False时,&符号按原样渲染。
VerticalAlignment
标题在标签矩形内的垂直放置。VerticalAlignmentConstants的成员:vbVerticalAlignTop (0,默认)、vbVerticalAlignMiddle (1)或vbVerticalAlignBottom (2)。
Visible
标签是否显示。Boolean,默认True。
WhatsThisHelpID
INFO
保留用于与VB6兼容;目前在twinBASIC中未实现。参见ShowWhatsThis。
Width
控件的宽度,默认以缇为单位(或使用容器的ScaleMode单位)。Double。当AutoSize为True时自动计算。
WordWrap
当标题否则会超出Width时是否在空白处分成多行。Boolean,默认False。
方法
Drag
开始、完成或取消手动VB风格拖动操作。与OLE拖动不同——参见OLEDrag。
语法:object.Drag [ Action ]
- Action
- 可选 DragConstants的成员:vbCancel (0)、vbBeginDrag (1,默认)或vbEndDrag (2)。
LinkExecute
INFO
保留用于与VB6的DDE功能兼容;目前在twinBASIC中未实现。
语法:object.LinkExecute Command
LinkPoke
INFO
保留用于与VB6的DDE功能兼容;目前在twinBASIC中未实现。
语法:object.LinkPoke
LinkRequest
INFO
保留用于与VB6的DDE功能兼容;目前在twinBASIC中未实现。
语法:object.LinkRequest
LinkSend
INFO
保留用于与VB6的DDE功能兼容;目前在twinBASIC中未实现。
语法:object.LinkSend
Move
在单次调用中重新定位并可选地调整标签大小。
语法:object.Move Left [, Top [, Width [, Height ] ] ]
- Left
- 必需 给出新水平位置的Single值。
- Top、Width、Height
- 可选 对应属性的新值。省略的值保持不变。
OLEDrag
从标签发起OLE拖动操作,引发OLEStartDrag事件以便应用程序填充DataObject。
语法:object.OLEDrag
Refresh
强制立即重绘父控件绘图表面上的标签矩形。
语法:object.Refresh
ShowWhatsThis
INFO
保留用于与VB6兼容;目前在twinBASIC中未实现。
语法:object.ShowWhatsThis
ZOrder
将标签置于其容器内无窗口同级堆栈的前面或后面。
语法:object.ZOrder [ Position ]
- Position
- 可选 ZOrderConstants的成员:vbBringToFront (0,默认)或vbSendToBack (1)。
事件
Change
当Caption被赋值与当前内容不同的值时引发。
语法:object_Change( )
Click
用户单击标签矩形时引发。默认事件。
语法:object_Click( )
DblClick
用户双击标签矩形时引发。
语法:object_DblClick( )
DragDrop
手动VB风格拖动操作在目标控件上结束时在目标控件上引发。
语法:object_DragDrop( Source As Control, X As Single, Y As Single )
DragOver
手动VB风格拖动操作进行中时在光标下方的控件上引发。
语法:object_DragOver( Source As Control, X As Single, Y As Single, State As Integer )
Initialize
在标签连接到其容器的绘制周期后但首次绘制前引发一次。用于依赖容器状态的最后时刻设置。
语法:object_Initialize( )
LinkClose
INFO
保留用于与VB6的DDE功能兼容;目前在twinBASIC中不会引发。
LinkError
INFO
保留用于与VB6的DDE功能兼容;目前在twinBASIC中不会引发。
LinkNotify
INFO
保留用于与VB6的DDE功能兼容;目前在twinBASIC中不会引发。
LinkOpen
INFO
保留用于与VB6的DDE功能兼容;目前在twinBASIC中不会引发。
MouseDown
用户在标签上按下任意鼠标按钮时引发。
语法:object_MouseDown( Button As Integer, Shift As Integer, X As Single, Y As Single )
MouseMove
光标在标签上移动时引发。
语法:object_MouseMove( Button As Integer, Shift As Integer, X As Single, Y As Single )
MouseUp
用户在标签上释放鼠标按钮时引发。
语法:object_MouseUp( Button As Integer, Shift As Integer, X As Single, Y As Single )
OLECompleteDrag
OLE拖动操作完成时在源控件上引发,指示目标接受了哪种效果(复制、移动、无)。
语法:object_OLECompleteDrag( Effect As Long )
OLEDragDrop
用户将数据放置到目标控件上时在目标控件上引发。
语法:object_OLEDragDrop( Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single )
OLEDragOver
OLE拖动经过目标控件时在目标控件上引发。
语法:object_OLEDragOver( Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single, State As Integer )
OLEGiveFeedback
拖动期间在源控件上引发,以便应用程序调整光标或其他视觉反馈。
语法:object_OLEGiveFeedback( Effect As Long, DefaultCursors As Boolean )
OLESetData
当目标请求已注册但尚未提供的数据格式时在源控件上引发。
语法:object_OLESetData( Data As DataObject, DataFormat As Integer )
OLEStartDrag
OLE拖动开始时在源控件上引发,以便应用程序填充DataObject并选择允许的效果。
语法:object_OLEStartDrag( Data As DataObject, AllowedEffects As Long )