Skip to content

Label 类

Label是一个无窗口轻量级控件,用于显示只读文本。标签通常用作输入控件旁边的静态标题("姓名:"、"邮箱:"),由代码保持更新的状态显示,或作为键盘助记锚点将Alt+按键路由到下一个可聚焦控件。因为Label没有自己的hWnd,所以比配置为只读的TextBox开销小得多——但它在键盘意义上也是非交互的:不能获取焦点、引发键事件或通过TAB键选择。

默认属性是Caption,默认事件是Click

vb
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 = TrueTextBox

助记符和访问键

标签本身不获取焦点,但参与键盘助记符路由。当UseMnemonicTrue(默认)时,Caption中的&符号将下一个字符标记为助记符——按Alt+该字符将焦点移到标签之后按TAB顺序的下一个可聚焦控件。使用&&显示字面&符号。将UseMnemonic设置为False可禁用特殊处理并按原样渲染&符号。

vb
lblName.Caption = "&Name:"           ' Alt+N → 下一个控件(通常是txtName)
lblHelp.Caption = "Use && to escape" ' 显示为: Use & to escape

约定是将Label在TAB顺序中紧接在其标题的控件之前,这样助记符自然指向该控件。

Caption布局

AlignmentVerticalAlignment共同定位标签矩形内的标题:

属性成员
AlignmentvbLeftJustify (0,默认)、vbRightJustify (1)、vbCenter (2)
VerticalAlignmentvbVerticalAlignTop (0,默认)、vbVerticalAlignMiddle (1)、vbVerticalAlignBottom (2)

WordWrapTrue时,当标题否则会超出Width时在空白处将标题分成多行。LineSpacing在行间插入额外的垂直间距(以缇为单位)。

AutoSizeTrue时,每当标题、字体、边框或自动换行设置更改时,标签会重新调整大小以适应其标题。自动调整大小在父控件的设备上下文中测量当前字体,因此在高DPI显示器上产生正确结果。当AutoSizeFalse时,标题被裁剪到标签的矩形内(仍遵循WordWrap和对齐设置)。

旋转

Angle以度为单位逆时针绕控件矩形左上角旋转渲染的标题。0为自然方向,90为逆时针四分之一转,以此类推。控件的边界矩形不变——因此大旋转角度可能将可见文本推到矩形之外。Click和鼠标事件的点击测试仍使用未旋转的矩形。

边框样式

BorderStyle在三种样式之间选择:

常量描述
vbNoBorder0无边框(默认)。
vbFixedSingleBorder1凹陷的Win32风格边框。Appearance选择3D或平面。
vbCustomBorder2通过BorderCustomOptions配置的逐边自定义边框。

使用vbCustomBorder时,BorderCustomOptions返回一个对象,其.Left.Top.Right.Bottom属性各自有独立的Size(线粗,以缇为单位)、Padding(边框与标题之间的内边距,以缇为单位)和Color值:

vb
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

背景

BackStylevbBFOpaque(默认——在标题下绘制BackColor)和vbBFTransparent(不绘制背景——父控件绘制的内容会透过来)之间选择。在PictureBoxImage或自定义绘制的窗体背景上叠加标题时,透明标签是必不可少的。在报表模式下创建的新标签默认为vbBFTransparent

数据绑定

设置DataSourceDataFieldCaption连接到Data控件记录集的字段。每次移动时绑定字段作为字符串读取,对Caption赋值会将记录集标记为已修改。DataFieldAggregateDataFieldAggregateValue由报表引擎用于显示运行汇总。

属性

Alignment

Caption在标签矩形内的水平放置。AlignmentConstants的成员:vbLeftJustify (0,默认)、vbRightJustify (1)或vbCenter (2)。

Anchors

标签的对应边缘跟随父控件调整大小时所依据的父控件边缘集合。只读——通过返回的Anchors对象分配单独的.Left.Top.Right.Bottom标志。

Angle

渲染标题的旋转角度,以度为单位,逆时针绕控件矩形左上角旋转。Double,默认0

Appearance

边框的样式,AppearanceConstants的成员:vbAppearFlatvbAppear3d(默认)。仅在BorderStylevbFixedSingleBorder时有意义。

AutoSize

标签是否重新调整大小以适应其CaptionFont、边框和自动换行设置。Boolean,默认False。当为True时,每当这些输入中的任何一个更改时都会重新调整大小。

BackColor

BackStylevbBFOpaque时绘制在标题后面的颜色。OLE_COLOR,默认为系统3D面色。

BackStyle

标签是否绘制背景。BackFillStyleConstants的成员:vbBFOpaque (1,默认——绘制BackColor)或vbBFTransparent (0——让父控件绘制的内容透过来)。

BorderCustomOptions

vbCustomBorder样式的逐边配置。只读;返回的对象公开.Left.Top.Right.Bottom子对象,每个都有SizePaddingColor属性。参见边框样式

BorderStyle

标签周围绘制的边框样式。ControlBorderStyleConstantsCustom的成员:vbNoBorder (0,默认)、vbFixedSingleBorder (1)或vbCustomBorder (2)。参见边框样式

Caption

标签渲染的文本。String默认属性。

语法:object.Caption [ = string ]

UseMnemonicTrue时,&符号将下一个字符标记为助记符;&&产生字面&符号。赋值与当前值不同的值会引发Change事件;赋值当前值为静默空操作。

Container

承载此标签的控件——通常是窗体、FrameUserControl。使用Get读取,使用Set更改。

ControlType

只读的ControlTypeConstants值,将此控件标识为标签。始终为vbLabel

DataChanged

绑定的Caption自上次保存或从DataSource刷新以来是否已被写入。Boolean。设置DataChanged = True也会将绑定记录集标记为已修改。

DataField

绑定DataSource记录集中由Caption镜像的字段名称。String

DataFieldAggregate

报表引擎应累积到DataFieldAggregateValue中的运行聚合类型。Label.AggregateConstants的成员:

常量描述
vbAggregateNone0无聚合(默认)。
vbAggregateSum1对报表访问的行中的绑定数值求和。

仅在标签在Report节中渲染时使用。

DataFieldAggregateValue

报表引擎计算的累积聚合值,公开为Decimal。在生成报表时由引擎更新;用户代码可从事件处理程序中读取但通常不写入。

DataFormat

INFO

保留用于与VB6兼容;目前在twinBASIC中未实现。

DataMember

INFO

保留用于与VB6兼容;目前在twinBASIC中未实现。

DataSource

Data控件(或其他DataSource提供程序)的引用,其记录集为DataField提供值。使用Set设置。

Dock

标签在其容器中的停靠位置。DockModeConstants的成员:vbDockNone(默认)、vbDockLeftvbDockTopvbDockRightvbDockBottomvbDockFill。停靠标签忽略Anchors

DragIcon

控件被拖放时用作鼠标光标的StdPicture(参见DragDragMode)。

DragMode

控件是否应在用户按住鼠标时自动拖动。DragModeConstants的成员:vbManual (0,默认——从代码调用Drag)或vbAutomatic (1)。

Enabled

标签是否接受鼠标输入并以正常文本颜色渲染Caption。禁用的标签仍会绘制,但使用系统灰色文本色并忽略鼠标事件。Boolean,默认True

Font

用于渲染CaptionStdFont。便捷属性FontBoldFontItalicFontNameFontSizeFontStrikethruFontUnderline读写此对象的相应成员。默认为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。默认为系统按钮文本色。当EnabledFalse时替换为系统灰色文本色。

Height

控件的高度,默认以缇为单位(或使用容器的ScaleMode单位)。Double。当AutoSizeTrue时自动计算。

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

MousePointervbCustom且指针位于控件上时用作鼠标光标的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中未实现。使用AlignmentvbRightJustify来右对齐标题。

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。当AutoSizeTrue时自动计算。

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值。
TopWidthHeight
可选 对应属性的新值。省略的值保持不变。

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 )

twinBASIC及其LOGO版权为作者"韦恩"所有