子窗体中的子窗体控件

Posted

技术标签:

【中文标题】子窗体中的子窗体控件【英文标题】:Subform Control within Subform 【发布时间】:2017-10-19 10:38:16 【问题描述】:

我构建了一个函数来循环遍历表单上的所有控件并应用事件(如果它是文本框/组合框/列表框),该函数还测试控件是否是子表单并为子表单控件运行相同的函数。我遇到的问题是,如果子表单中有另一个子表单,我无法循环通过控件。

Public Function FE_LoopThroughAllControlsNumLockOn(frm As Form)
Dim ctl As control
For Each ctl In frm
    If ctl.ControlType = acSubform Then
        Call FE_LoopThroughAllControlsNumLockOn(frm(ctl.Name).Form) 'Error here on subform within subform
    ElseIf xIsControlForEventNumLock(ctl.ControlType) = True Then
        ctl.OnGotFocus = "=FM_NUM_ON()"
    End If
Next ctl
Set ctl = Nothing
End Function

Function xIsControlForEventNumLock(vControlType As AcControlType) As Boolean
    Select Case vControlType
        Case Is = acComboBox: xIsControlForEventNumLock = True
        Case Is = acListBox: xIsControlForEventNumLock = True
        Case Is = acTextBox: xIsControlForEventNumLock = True
        Case Else: xIsControlForEventNumLock = False
    End Select
End Function

如果我尝试以下方法,它会起作用:

Debug.Print Forms!frmHR_Details!frm_HRDetails2.Form!HRSubForm2.Form!sID

但这没有,为什么?

Debug.Print Forms("frmHR_Details").Form("frm_HRDetails2").Form.Form("HRSubForm2").Form.sID.Value

或者有没有办法做到这一点:

set ctl = Eval("Forms!frmHR_Details!frm_HRDetails2.Form!HRSubForm2.Form!sID")

【问题讨论】:

试试frm(ctl.Name).Form,而不是ctl.Form 还是不行 好吧,因为子表单不是真正的表单,并且函数需要表单对象来循环其控件,所以不会工作。 【参考方案1】:

看看这个链接。

http://access.mvps.org/access/forms/frm0031.htm

To refer to a control property, like Enabled         
On Mainform     
Me!ControlName.Enabled  Me.Parent!ControlName.Enabled
On Sub 1                Me!Subform1.Form!ControlName.Enabled    Me!ControlName.Enabled
On Sub 2                Me!Subform1.Form!Subform2.Form!ControlName.Enabled  Me!Subform2.Form!ControlName.Enabled

【讨论】:

不行,我需要一个可以在邮件表单中的 sub 2 上运行的循环。我的应用程序有子表单,子表单是这样的:Forms(MainFormName).Form(Sub1Name).Forms(Sub2Name).Controls

以上是关于子窗体中的子窗体控件的主要内容,如果未能解决你的问题,请参考以下文章

主窗体选项卡控件将值传递给选择案例的子窗体变量

如何从主窗体更新子窗体中的图像框控件源

按键精灵,父窗口下很多子窗口怎么找想要的

Qt:子窗口中如何获取主窗体ui中的控件

访问子窗体未绑定控件#Error

winform的窗体中菜单栏中有两个菜单的子窗体间的跳转