以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]怎么判断项目中是否有其他窗口打开?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=118224)

--  作者:fiendcat
--  发布时间:2018/4/27 12:52:00
--  [求助]怎么判断项目中是否有其他窗口打开?
如题,在关闭一个窗口时,写在afterclose中,怎么判断项目中是否有其他窗口打开?谢谢!
--  作者:fiendcat
--  发布时间:2018/4/27 14:37:00
--  
求助大神
--  作者:有点甜
--  发布时间:2018/4/27 14:41:00
--  
For Each f As WinForm.Form In Forms
    If f.opened Then
        msgbox(f.name)
    End If
Next

--  作者:fiendcat
--  发布时间:2018/4/27 15:29:00
--  
谢谢。不过我放在窗口的afterclose 上,没有消息跳出,是不是不起作用?
--  作者:fiendcat
--  发布时间:2018/4/27 15:41:00
--  
我刚测试了下,起作用,但是明明窗口开着,也返回false ,是什么原因呢?
--  作者:有点甜
--  发布时间:2018/4/27 15:46:00
--  

写下面代码,如果123没有弹出,说明事件不执行,如果窗口名没有弹出,说明没有窗口打开。

 

msgbox(123)

For Each f As WinForm.Form In Forms
    If f.opened Then
        msgbox(f.name)
    End If
Next


--  作者:fiendcat
--  发布时间:2018/4/27 15:48:00
--  
Dim  f As WinForm.Form 
f = Forms("标准作业程序SOP窗口")
If f.Opened Then
    Messagebox.Show("窗口已经打开!")
End If

这个就可以跳出提示框 说 窗口已经打开,但是下面代码都是返回false,这是什么原因呢?(我也测试过,f会包含 “标准作业程序SOP窗口”这个窗口)
For Each f As WinForm.Form In Forms
    If f.opened Then
         Messagebox.Show(f.name)
    End If
Next
[此贴子已经被作者于2018/4/27 15:50:02编辑过]

--  作者:fiendcat
--  发布时间:2018/4/27 15:49:00
--  
我测试过,代码是执行的
--  作者:有点甜
--  发布时间:2018/4/27 15:54:00
--  
代码绝对不会有问题,请认认真真测试。
--  作者:fiendcat
--  发布时间:2018/4/27 15:55:00
--  
For Each f As WinForm.Form In Forms
    If Forms(f.name).opened Then
        MessageBox.Show("111111")
    End If
Next

这样就可以,奇怪
[此贴子已经被作者于2018/4/27 15:55:24编辑过]