当前位置: 代码迷 >> VFP >> 如何处理非顶层表单重复打开
  详细解决方案

如何处理非顶层表单重复打开

热度:6774   发布时间:2013-02-26 00:00:00.0
如何避免非顶层表单重复打开?
如题,非顶层表单(在顶层表单中),怎么判断该表单是否打开,如已打开,激活它,避免重复打开。

------解决方案--------------------------------------------------------
DECLARE INTEGER FindWindow IN USER32.DLL STRING,STRING
LOCAL lcTitle
lcTitle= "表单的CAPTION "
IF FindWindow(0,lcTitle)!=0
MESSAGEBOX( "表单的CAPTION 已经运行! "+SPACE(5),48, "信息提示 ")
CLEAR DLLS
QUIT
ENDIF
CLEAR DLLS
------解决方案--------------------------------------------------------
我一直用在顶层表单,即使不行也有办法。

IF VARTYPE(TESTFORM1)= 'O '
? '运行了 '
RETURN
ENDIF


例1:

运行表单时

IF VARTYPE(TESTFORM1)= 'O '
? '运行了 '
RETURN
ENDIF
DO FORM TESTFORM1.SCX



IF VARTYPE(TESTFORM1)= 'O '
? '运行了 '
RETURN
ENDIF
DO FORM 表名文件名.SCX NAME TESTFORM1
------解决方案--------------------------------------------------------
如果子表不想用模式表单,就改成这样:

子表单的

Load事件
PUBLIC vFORM

Unload事件
RELEASE vFORM


主表单运行子表单的按钮的Click事件:
IF VARTYPE(vFORM)= 'U '
DO FORM tform.SCX
ELSE
MESSAGEBOX( '子表单已经运行! ',48, '信息提示 ')
ENDIF


但因为子表单在顶层表单中,所以用检测子表单的Caption和检测表单变量的方法都检测不到。
激活就没有直接的方法。


个人认为用模式表单就可以了。我的程序都是这么用的,主表单为非模式,其余子表单均为模式。


  相关解决方案