【发布时间】:2013-10-25 06:24:24
【问题描述】:
如上所述,这是一个 Access 2010 .accdb。
我有一个主要的导航表单:frmNav。
在 frmNav 上,我有一个 Navigation 子窗体控件:NavigationSubForm。
我使用 docmd browseto 在导航控件的选项卡之间移动。
在 NavigationSubForm 控件中加载的第一个表单是 frmInboundShipments。
frmInboundShipments 包含一个子表单控件 sfrmListInvoicesByShipment。
sfrmListInvoicesByShipment 包含经过过滤的发票数据表,该数据表与 frmInboundShipments 中的每个货件相关联。
frmItemInvoices 包含 sfrmListInvoicesByShipment 中引用的发票。
以下使用browseto命令在frmInboundShipments和frmItemInvoices之间移动的方法做触发frmInboundShipments上的UnLoad事件:
- 单击 frmInboundShipments 上的命令按钮以调用 browseto 到 frmItemInvoices
- 单击 frmNav 上导航控件上的导航选项卡/按钮以调用 browseto frmItemInvoices。
但是,当我执行以下操作时,frmInboundShipments 上的 UnLoad 事件无法触发:
-
双击 sfrmListInvoicesByShipment 中的字段/数据表行以触发 browseto 命令以显示/移动到 frmItemInvoices:
一个。立即执行 docmd browseto 显示 frmItemInvoices
b.先将焦点放在父窗体上,然后执行docmd browseto 显示frmItemInvoices
i. e.g.: Me.Parent.sfrmListInvoicesByShipments.SetFocus DoCmd.BrowseTo acBrowseToForm, "frmItemInvoices", "frmNav.NavigationSubform", ...criteria....
我一生都无法理解为什么当从子表单发出 browseto 命令时事件不会触发,而是在两个表单之间导航时在所有其他情况下触发。
我查看了 Access 2010 的事件顺序,我没有看到任何明确说明在从子窗体查看另一个窗体时不会触发主窗体的 Unload 事件的任何内容。
在这种情况下也不会触发 Deactivate 事件。
更新,2013 年 10 月 18 日:进一步调查显示父窗体的 Close 事件确实触发,但绝对不是 deactivate 或 unload 事件。问题是一旦表单关闭事件发生,我想要捕获的值就已经消失了。不知道从这里做什么......
【问题讨论】:
-
我暂时不会关闭它,但我确实找到了解决方法:当从子表单调用 browseto 时,我决定不捕获父表单的卸载事件中的值,而是将数据捕获移动到子窗体控件的 Enter 事件。最终结果可能是它被更频繁地编写,当用户通过子表单控件进行选项卡或去搜索该表单中的值等时。最终,它实现了目标。我仍然很想知道为什么卸载永远不会触发。至少在这种情况下,关于子表单事件顺序的 MS 文档确实不够充分。
-
我发现在 Access 中,为了处置一个表单,它需要先关闭然后处置。在我以前的使用中,VBA 不允许处理打开的(可见或不可见)表单。不幸的是,当涉及到 VBA 时,您必须细化,如果您不告诉它这样做,它就不会暗示它。
-
您是否尝试过从父表单而不是子表单触发 BrowseTo 命令?如果(我假设)子表单上有一个重要的变量,您可以将它传递给公共字符串并在触发代码时使用该字符串?
标签: ms-access navigation vba ms-access-2010