想象一个表单,出于演示目的,仅包含需要相互镜像的子表单和文本框。
我尝试通过将文本框上的控制源设置为子表单中字段的值来实现此目的,这可以使它们相互镜像,但文本框不可编辑,因此这是一个不合适的解决方案。
我决定尝试的下一件事是在两个控件上使用 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
我可以在子表单范围内 Access 子表单字段 AfterUpdate 事件,但如果这样做,我将无法 Access 文本框,因为它位于主表单中,而不是子表单中。
因此,我要么需要一种在主窗体范围内的子窗体中的字段上定义事件函数的方法,要么需要一种使文本框成为子窗体的一部分,同时保持子窗体在数据 TableView 中打开的能力的方法.
最佳答案
不确定我是否理解了整个问题(数据 TableView 如何发挥作用?),但这应该可以满足您的要求:
(在子表单中)
Private Sub Notes_AfterUpdate()
Me.Parent!Notes_Textbox.Value = Me![Notes].Value
End Sub
根据评论进行编辑:到目前为止,最简单的解决方案是使用连续表单而不是子表单中的数据表。
您可以有两个文本框,一个位于“详细信息”部分中的单行文本框,以及一个位于表单页眉或页脚中的大文本框。两者具有相同的控制源,并且在编辑另一个时会自动更新。无需代码。
如果必须是子表单数据表,可以使用类似的方法:将主表单绑定(bind)到同一个记录源,并在子表单的On Current
中,将主表单移动到同一个记录源当前记录。
关于vba - 如何从主窗体内部引用子窗体中对象的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46063909/