Call Modal windows and return to original windows

Call Modal windows and return to original windows

我想通过模态表单模式实现搜索UI,它可以从不同的表单打开。模态窗体关闭后,模态窗体会将 select 记录 ID 传回调用窗体。

例如,我将使用客户搜索模态表单。当用户要搜索客户名称时,可以通过 Sales Order、Quotation、Invoice 或 AR form(calling form)打开。搜索完成后,模态表单会将 selected 客户 ID 传回调用表单,调用表单可以使用 selected 客户执行任务。

我尝试在调用表单上使用 getfocus。但是,它不起作用,因为如果调用表单有对象,则不会触发获取焦点。

如何在模态窗体关闭后获取控制权并接收从模态窗体传回的 ID?

在每个调用表单中声明一个表单对象变量WithEvents。如果您的搜索被触发,您打开搜索表单,将变量设置为打开的表单并连接关闭事件。

Close- 事件处理程序中,您可以处理用户在搜索表单中交互的结果值。

搜索表单应将 PopUp-属性 设置为 True。

调用形式中的代码:

' general declarations area 
Private WithEvents frmSearch As Form

Private Sub cmdSearch_Click()

    Const FORM_NAME As String = "frmSearch"

    DoCmd.OpenForm FORM_NAME, acNormal
    Set frmSearch = Forms(FORM_NAME)
    frmSearch.OnClose = "[Event Procedure]"

End Sub

Private Sub frmSearch_Close()
    ' process the result here, 
    ' assuming result is in control txtSearchResult
    MsgBox frmSearch.txtSearchResult.Value
End Sub

此解决方案基于用户在完成搜索后关闭搜索表单的假设。如果不是这种情况,您可以在搜索表单中定义自己的事件并改为处理它。