模式窗口有时候用起来确实很方便,比如说增加一条资料的时候,弹出一个模式窗口,增加完成后继续执行下面的代码,有时候用来取得新增加的值,如: ... frmClient.Show vbModal If 增加成功 then 取得新值 End If ... 但是如果使用MDI窗口的话,就麻烦了,因为MDI子窗体不允许以模式窗口显示,所以用上面的方法就行不通了。 于是我使用CallByName加一个全局的变量来实现以上功能。 Private Type SelectInfos blnAddNewReturn As Boolean ' 是否增加完后返回信息 frmSource As Form ' 源调用窗口 strFunctionName As String ' 当返回参数时要执行的函数/过程名称 End Type
Public guSelectInfos As SelectInfos ' 信息选择时用到 frmInfos '// 注意一定要用Public的,否则在其他窗口里无法调用。 Public Sub LoadClientInfos(ByVal lngId as Long) '加载客户信息 End Sub
Private Sub AddNew() ... With guSelectInfos .blnAddNewReturn = True '// 设置源窗口 Set .frmSource = Me '// 设置要调用的函数名称 .strFunctionName = "LoadClientInfos" frmClient.Show End With ... End Sub
frmClient Private Function UpdateClient() ... '*************************************** '** 判断是否为其他窗口调用时的新增,如果是则需要返回当前编号 '*************************************** With guSelectInfos If .blnAddNewReturn Then '// 调用源窗口内的函数返回值 Call CallByName(.frmSource, .strFunctionName, VbMethod, lngID) .blnAddNewReturn = False End If End With '*************************************** ... End Function 大致过程就是这样,虽然有点麻烦,不过总算也是一种解决方法。 
|