使用CallByName“代替”模式窗口

发表于:2007-06-30来源:作者:点击数: 标签:
模式窗口有时候用起来确实很方便,比如说增加一条资料的时候,弹出一个模式窗口,增加完成后继续执行下面的代码,有时候用来取得新增加的值,如: ... frmClient.Show vb Modal If 增加成功 then 取得新值 End If ... 但是如果使用MDI窗口的话,就麻烦了,因

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

...
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

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

原文转自:http://www.ltesting.net