有没有办法模拟从模态/弹出表单激活的表单
Posted
技术标签:
【中文标题】有没有办法模拟从模态/弹出表单激活的表单【英文标题】:Is There a Way To Simulate the Form Activate from Modal/Pop Up Form 【发布时间】:2016-08-29 18:02:46 【问题描述】:我有一个表单,它打开一个模态弹出帮助表单来收集一些数据。当此模式弹出窗体关闭时,焦点返回到主窗体。当焦点回到我的主窗体时,我想触发一些活动。
根据 Microsoft 文档,当从模型弹出窗口返回时,表单的事件模型不会触发 Form_Activate
或 Form_GotFocus
事件。
这些表单和所有控件都是完全未绑定的。
当焦点返回到我的表单时,有什么技巧可以在代码中知道吗?
如果两个表单都处于正常模式,Form_Activate
在辅助表单关闭时会在主表单中触发,但这不能满足我的需要。我还没有找到一个类似的事件来捕获这个。我希望有人有解决方法。
【问题讨论】:
你是如何关闭助手表单的?您能否捕获助手表单的QueryClose
事件并使用它来执行Form_Activate
应该在您的主表单上执行的任何操作?你能用它来临时隐藏帮助表单,它会返回执行到它最初显示的位置(并且从你的主表单中的那个位置你可以手动调用Form_Activate
)?
如果您的表单是模态的,则在childForm
关闭后紧跟在childForm.Show vbModal
之后的那一行继续执行。
【参考方案1】:
为了清楚起见,我遇到的问题是我将帮助程序表单中的设计时属性设置为充当对话框 - (弹出和模态为真)。当我打开响应主表单上的按钮单击事件的表单时,我没有包含acDialog
选项。
如果您省略 WindowMode=acDialog
设置,代码将异步运行,完整地完成 click 事件处理程序中的代码,而不是暂停和等待。
acDialog
选项显然强制DoCmd.OpenForm
命令同步运行,暂停代码执行,然后在模式窗体关闭后返回。
Private Sub btnHelper_Click()
DoCmd.OpenForm "frmHelper", WindowMode:=acDialog
'Do stuff after frmHelper closes
End Sub
【讨论】:
嗯,这是UserForm
还是“访问表单”?
不确定我是否理解这个问题。两者都是。它只是我在 Access 中构建的一个表单。没什么特别的,在这种情况下,它实际上被称为 frmPermit。它收集与车辆配置文件相关的许可数据,我将名称更改为问题的通用名称,以免分散注意力。
如您所见,以对话框形式打开表单会停止调用代码。弹出表单是一种非常不同的表单,用于不同的用途,不会停止调用代码。我还应该指出,模型表单也是 MASSILVY 不同类型的表单,用于不同的用途。所以不要混淆模型、弹出窗口和对话框表单——它们都非常不同,并且用于不同类型的用途。并忽略有关用户表单的建议,因为它们不适用于访问。并忽略带有 .show vbModel 的示例 - 它不适用于 Access 表单。
@AlbertD.Kallal 无疑你的意思是 modal / vbModal
,而不是 model。
@AlbertD.Kallal FWIW 你可以肯定在 MS-Access VBA 中有一个“正常”UserForm
- 不过你需要自定义你的 VBE 工具栏,因为它不存在默认情况下。 Rubberduck 的 代码资源管理器“添加用户窗体”命令将 UserForm
添加到任何 VBA 项目中,在任何 VBA 主机中。以上是关于有没有办法模拟从模态/弹出表单激活的表单的主要内容,如果未能解决你的问题,请参考以下文章