【问题标题】:Call Modal windows and return to original windows调用模态窗口并返回原始窗口
【发布时间】:2015-05-26 04:12:08
【问题描述】:

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

例如,我将有客户搜索模态表单。当用户要搜索客户名称时,它可以通过销售订单、报价单、发票或 AR 表单(调用表单)打开。搜索完成后,Modal 表单会将选定的客户 ID 传递回调用表单,调用表单可以使用选定的客户执行任务。

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

模态表单关闭后,如何获得控制权并接收从模态表单传回的 ID?

【问题讨论】:

    标签: ms-access modalviewcontroller


    【解决方案1】:

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

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

    搜索表单应将PopUp-Property 设置为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
    

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

    【讨论】:

    • 谢谢。我从不使用 WithEvnets。有了你的回答,我浏览了其他一些网站,WithEvents 确实是一个不错的功能。问题:对于frmSearch.OnClose = "[Event Procedure]","[Event Procedure]" 应该是"[frmSearch_Close]"吗?
    • 我想通了。将所有代码复制到调用表单中,无需更改任何内容。它完美地工作。谢谢你的帮助。
    • 完美的解决方案是从主窗体设置子窗体事件。如何从主窗体设置子窗体控件的事件,事件函数在主窗体模块中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多