使用CallByName“代替”模式窗口。

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

模式窗口有时候用起来确实很方便,比如说增加一条资料的时候,弹出一个模式窗口,增加完成后继续执行下面的代码,有时候用来取得新增加的值,如:

...

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

大致过程就是这样,虽然有点麻烦,不过总算也是一种解决方法。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有