微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

访问 VBA - 如何获取父子窗体的属性,或获取子窗体的用户给定名称不是对象引用名称

如何解决访问 VBA - 如何获取父子窗体的属性,或获取子窗体的用户给定名称不是对象引用名称

在 MS Access 2016 中,假设我有 2 个表单:frmMain 和 frmBaby。

我已将 frmBaby 作为子窗体嵌入 frmMain。我在 frmBaby 上嵌入了一个名为 tbxInput 的控件(假设它是一个文本框,但它可以是任何控件)。

在 frmMain 上,由于 frmBaby 是 frmMain 上的一个“控件”,我给该控件命名为 subfrmBaby 的传统名称

现在,在 VBA 中,subfrmBaby 上的事件将 tbxInput 控件 ByRef(如 Me.tbxInput)传递给一个函数,该函数旨在返回传递 ByRef 的控件的父级的 .Left 属性。也就是说,我需要该函数来确定 frmMain 上 subfrmBaby 位置的 .Left 属性。 (该函数比这更复杂,但为了保留这个问题,我们只说该函数返回 .Left 属性值,因为 .Left 值是我执行该函数所需的值。)

假设函数是:Public Function fncLocation(ByRef whtControl As Variant) as Long

(我使用 Variant 以便可以传递空值。)

这是我希望返回 whtControl 的父级(即 subfrmBaby)的 .Left 值的代码lngLeft = whtControl.Parent.Left

但是,这给了我一个错误:“应用程序或对象定义的错误

当我使用即时窗口检查时,我发现 whtControl.Parent.Name 是“frmBaby”而不是“subfrmBaby”,这使得在 frmMain 上引用子表单有问题,因为我无法弄清楚如何获得实际的从传递给函数的对象中为 frmMain 上的控件提供的名称,因此我也无法按名称引用子表单。

问题:

  1. 如何获取传递给此函数的控件的父级的 .Left 值?

  2. 如何获得分配给 frmMain 上的子表单控件的实际名称在这种情况下,我需要“subfrmBaby”而不是“frmBaby”的名称

提前感谢您的想法。

解决方法

您可以通过迭代主窗体上的控件来实现,假设 whtControl 是子窗体的窗体对象(如果是文本框,则为 whtControl.Parent.ParentIf c.Form Is whtControl.Parent Then

Dim mainForm As Form
Set mainForm = whtControl.Parent
Dim c As Access.Control
Dim subformControl As Access.Control
For Each c In mainForm.Controls
    If TypeOf c Is SubForm Then
        If c.Form Is whtControl Then
            Set subformControl = c
            Exit For
        End If
    End If
Next
If Not subformControl Is Nothing Then
    Debug.Print subformControl.Left
End If

请注意,迭代控件会降低性能,但此代码仍应花费几毫秒,而不是几秒钟。此外,由于我们测试了引用相等性,因此即使在父表单上多次出现相同的子表单,它也能正常工作。

,

有趣。我不认为你可以。

如您所见,whtControl 的父级是它的形式 frmBaby
那一个的父项是 frmMain。子窗体控件在“向上”时不属于对象链,只有向下时才属于对象链。

如果你总是使用问题中的命名方案,你可以这样做(空气代码):

strSubform = whtControl.Parent.Name
strSubformCtrl = "sub" & strSubform
Set ctlSubform = whtControl.Parent.Parent(strSubformCtrl)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?