Mar*_*kus 7 ms-access vba access-vba
标签控件通常绑定到文本框或类似的其他控件.我知道有一种方法可以通过代码访问标签,但我不记得怎么做了.
有人可以帮忙吗?
也许是这样的:
Me.txtName.Child!lblName.Value
Run Code Online (Sandbox Code Playgroud)
要么
Me.txtName.Parent!lblName.Value
Run Code Online (Sandbox Code Playgroud)
当我通过表单上的控件枚举以进行验证时,我将使用它.然后我想将控件的标签用作错误消息中的信息,以向用户显示错误的位置.
使用文本框,您可以尝试
Text0.Controls.Item(0).Caption
Run Code Online (Sandbox Code Playgroud)
其中Control 0是链接标签
@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
Run Code Online (Sandbox Code Playgroud)
现在,如果没有附加标签,这会中断,因此返回标签名称而不是控件引用可能更有意义:
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
Run Code Online (Sandbox Code Playgroud)
这可能是通过选项组的Controls集合中的单个循环完成的,但是已经很晚了!什么似乎非常接近防弹,当然不是任何人给老鼠的屁股!:)