模式窗口有时候用起来确实很方便,比如说增加一条资料的时候,弹出一个模式窗口,增加完成后继续执行下面的代码,有时候用来取得新增加的值,如:
...
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
大致过程就是这样,虽然有点麻烦,不过总算也是一种解决方法。