如何从主窗体内部引用子窗体中对象的事件

时间:2017-09-05 21:57:49

标签: vba ms-access

想象一下这样一种形式,为了减少目的,它只包含一个需要相互镜像的子形式和文本框。

我尝试通过将文本框中的控制源设置为子窗体中字段的值来实现此目的,这样可以使它们相互镜像,但文本框不可编辑这是一个不合适的解决方案。

接下来我决定尝试在两个控件上使用 AfterUpdate 事件来运行设置其他控件值的代码。

这对文本框来说很简单:

'Set value of Notes field on subform whenever value of the corresponding textbox 
Private Sub Notes_Textbox_AfterUpdate()
    Me.subform.Form![Notes] = Me.Notes_Textbox.Text
End Sub

但是,对于子表单字段而言,这并不简单。我不知道如何在子窗体中的字段上引用事件,这样仍然允许我引用该子窗体之外的控件。

作为演示,我需要一种方法来做到这一点:

Private Sub subform_Notes_AfterUpdate()
    Me.Notes_Textbox.Text = Me.subform.Form![Notes]
End Sub

我可以访问子窗体范围内的子窗体字段AfterUpdate事件,但是如果我这样做,那么我就无法访问Textbox,因为它是在主窗体中,而不是子窗体。

所以我需要一种方法来在主窗体范围内的子窗体中的字段上定义事件函数,或者使文本框成为子窗体的一部分,同时保持子窗体在数据表视图中打开的能力

1 个答案:

答案 0 :(得分:1)

不确定我是否遇到了整个问题(数据表视图如何发挥作用?),但这应该做你想要的:

(在子表格中)

Private Sub Notes_AfterUpdate()
    Me.Parent!Notes_Textbox.Value = Me![Notes].Value
End Sub

从评论中编辑:到目前为止,最简单的解决方案是连续形式,而不是子表单中的数据表。

您可以在“详细信息”部分中使用两个文本框,一个单行框,在表单页眉或页脚中使用一个大文本框。两者都具有相同的控制源,并在编辑另一个时自动更新。无需代码。

如果它必须是子表单数据表,您可以使用类似的方法:将主表单绑定到相同的记录源,并在子表单的On Current中,将主表单移动到相同的当前记录。 / p>