回 帖 发 新 帖 刷新版面

主题:如何限制表单同时被打开的个数?

设置非模式表单,可同时打开多个表单,但同时一个表单可能被打开多次,能不能控制一个表单同时最多只能被打开一次?谢谢!

回复列表 (共6个回复)

沙发

If !Wexist("FormName")
    Do Form FormName
Endif

板凳


谢谢一楼的指点!我在下拉菜单中用了您提供的语句,还是可以几次同时打开一个表单。不知是哪里出了问题?

3 楼

if _SCREEN.FORMCOUNT>3  &&打开表单数上限
  stor _screen.forms(2).name to formanme
  messagebox('你已經打開了一個窗口:'+formanme+','+chr(13)+chr(13)+'請關閉後再...',48,'提示')
  retu .f.
ENDIF

4 楼

fyyylyl网友说的不错,只是他没有进一步指明。

Wexist("FormName") 函数可以判断Name属性是"FormName"的窗子是否存在。在他的代码中,窗子的文件名和窗子的Name属性是一致的,因此没问题。

你说不行,那估计是你的窗子的文件名和窗子的Name属性不一致。比如你的窗子文件名叫做“myform.scx”,而窗子的Name属性是“form1”,这就会出问题。当然不是说两者必须一致,假如你就是类似我举例的那样,可以改为

If !Wexist("form1")
    Do Form myform
Endif

不过这种方式还要求你的每个不同的窗子必须用不同的Name,如果你有两个(或多个)不同窗子的Name相同,那就会出现打开这个打不开那个的情况。

Wexist()函数仅是一个保留函数,为早期低版本Fox兼容而留下的。虽然照样可用。
比较好的方式是这样的,do from命令启动一个窗子时,会生成对应窗子文件名的全局变量,一般的通过判断该变量来判断该窗子是否已经启动。

比如还是按照上面说的你的窗子文件名叫做“myform.scx”,则

if TYPE("myform")="U" OR ISNULL(myform)
   Do Form myform.scx
endif

5 楼

ilikefox 本论坛能读懂程序非你莫熟也!

6 楼

楼主你好:
    我没时间看上面的回帖,就你提的问题很简单呀,就是把调用表单那个位置锁死。反正我都是那么解决的,信不信由你。哈哈!

我来回复

您尚未登录,请登录后再回复。点此登录或注册