标签控件通常绑定到文本框或类似的其他控件。我知道有一种方法可以通过代码访问标签,但我不记得该怎么做。
有人可以帮忙吗?
可能是这样的:
Me.txtName.Child!lblName.Value
或者
Me.txtName.Parent!lblName.Value
当我通过表单上的控件枚举以进行验证时,我会使用它。然后我想将控件的标签用作错误消息中的信息,以向用户显示错误的位置。
答案 0 :(得分:9)
使用文本框,您可以尝试
Text0.Controls.Item(0).Caption
其中Control 0是链接标签
答案 1 :(得分:5)
@Astander提供了正确答案,但请记住,并非所有控件都具有相同类型的Controls集合。
TextBoxes,ComboBoxes,ListBoxes,CheckBoxes在它们的控件集合中最多有1个项目(附加标签),但是如果没有附加标签,它们甚至都没有,所以.Controls(0)将抛出错误。
选项组在框架内有多个控件,标签和选项按钮或切换按钮。当您从表单工具工具栏上删除表单上的选项组时,将使用附加标签创建框架,因此它将是索引为0的控件。但是,例如,如果删除默认标签,请添加选项按钮和然后添加一个标签,它不会是索引0,而是索引.Controls.Count - 1。
因此,对于标签选项组的标题,您要么要小心,如果删除默认标签,则在添加标签后也会删除框内的控件。如果不是这样,你需要命名标签并按名称引用它,因为选项/切换按钮的标签是选项组的Controls集合的一部分(这让我感到惊讶 - 我预计它们只会在控件中它们附加的选项/切换按钮的集合。
为了避免这个问题,我可以想象一下复杂的代码,你通过选项组的Controls集合循环查找附加到选项/切换按钮的标签,然后第二次循环选项组的Controls集合,这次看只在标签上。像这样:
Public Function FindOptionGroupLabel(ctlOptionGroup As Control) As Control
Dim ctl As Control
Dim strOptionToggleLabels As String
If ctlOptionGroup.ControlType <> acOptionGroup Then
MsgBox ctlOptionGroup.Name & " is not an option group!", _
vbExclamation, "Not an option group"
Exit Function
End If
For Each ctl In ctlOptionGroup.Controls
Select Case ctl.ControlType
Case acOptionButton, acToggleButton
If ctl.Controls.Count = 1 Then
strOptionToggleLabels = strOptionToggleLabels & " " & ctl.Controls(0).Name
End If
End Select
Next ctl
strOptionToggleLabels = strOptionToggleLabels & " "
For Each ctl In ctlOptionGroup.Controls
Select Case ctl.ControlType
Case acLabel
If InStr(" " & strOptionToggleLabels & " ", ctl.Name) = 0 Then
Set FindOptionGroupLabel = ctl
End If
End Select
Next ctl
Set ctl = Nothing
End Function
现在,如果没有附加标签,这会中断,因此返回标签名称而不是控件引用可能更有意义:
Public Function FindOptionGroupLabel(ctlOptionGroup As Control) As String
Dim ctl As Control
Dim strOptionToggleLabels As String
If ctlOptionGroup.ControlType <> acOptionGroup Then
MsgBox ctlOptionGroup.Name & " is not an option group!", _
vbExclamation, "Not an option group"
Exit Function
End If
For Each ctl In ctlOptionGroup.Controls
Select Case ctl.ControlType
Case acOptionButton, acToggleButton
If ctl.Controls.Count = 1 Then
strOptionToggleLabels = strOptionToggleLabels & " " & ctl.Controls(0).Name
End If
End Select
Next ctl
strOptionToggleLabels = strOptionToggleLabels & " "
For Each ctl In ctlOptionGroup.Controls
Select Case ctl.ControlType
Case acLabel
If InStr(" " & strOptionToggleLabels & " ", ctl.Name) = 0 Then
FindOptionGroupLabel = ctl.Name
End If
End Select
Next ctl
Set ctl = Nothing
End Function
这可能是通过选项组的Controls集合中的单个循环完成的,但是已经很晚了!什么似乎非常接近防弹,当然不是任何人给老鼠的屁股! :)
答案 2 :(得分:1)
如果它的访问我认为是
窗体!YourFormName!YourField.Value
或者如果你有一个子表格:
窗体!yourMainForm!YourSubForm!YourField.Value
答案 3 :(得分:1)
以下是我编写的一些代码,用于重命名与OptionButtons关联的标签。标签具有父属性,该属性指向它标记的控件。该函数非常通用,而子程序是为OptionButtons编写的。这段代码应该适用于大多数事情,除非标签没有关联,我没有提供任何恢复。
公共函数paNameControlLabel(FormName As String,ControlName As String)As String Dim frm As Form 昏暗的ctl作为控制 昏暗的ctlLabel作为控制 Dim ctlParent As Control
Set frm = Forms(FormName)
For Each ctl In frm.Controls
Select Case ctl.ControlType
Case acLabel
If ctl.Parent.Name = ControlName Then
Debug.Print "Label " & ctl.Name & " Renamed to lbl" & ControlName
ctl.Name = "lbl" & ControlName
paNameControlLabel = ctl.Name
End If
End Select
Next ctl
结束功能 Public Sub paNameOptionButtonLabels(FormName As String) Dim frm As Form Dim ctl As Control
Set frm = Forms(FormName)
For Each ctl In frm.Controls
If ctl.ControlType = acOptionButton Then
Debug.Print paNameControlLabel(FormName, ctl.Name)
End If
Next ctl
Set frm = Nothing
End Sub
答案 4 :(得分:0)
可能晚了,但是我为此苦苦挣扎,有效的方法是检查控件的类型以确保它支持标签,然后使用
ctl.Properties(3) ' For the label name
Forms(ctl.Form).Controls(ctl.Properties(3)).Caption ' For the label text
在“即时”窗口中,使用文本索引而不是幻数:ctl.properties("LabelName")
起作用。
首先,我在文本框的属性中寻找标签并删除了。 然后,我在表单的控件中查看并找到了它。
希望这可以帮助某人!