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