以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何控制一个窗口完全打开完后才有打开另一个窗口  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=84697)

--  作者:happyft
--  发布时间:2016/5/7 22:27:00
--  如何控制一个窗口完全打开完后才有打开另一个窗口

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20160507221001.png
图片点击可在新窗口打开查看

项目的窗口中的table全部都是sqltable通过窗口的afterload中的代码在打开窗口时用函数fill表结构及设置很多窗口用到的全局变量的值,当在导航中点击不同的节点会打开不同的窗口,如果等一个窗口完全打开后即所有相应代码都运行完成后再打开另外一个窗口就没有什么问题。

如上图,先点击报废单后马上快速的点击采购入库单就会出错,原因就是第一个窗口的代码还没有运行完但点击第二个节点后当前活动窗口已经切换到“采购入库单” ,要如何控制不管用户点击不同的窗口多快,代码都是按所点击的顺序逐个运行每个窗口的代码而不出现上述错误 ,谢谢!

--  作者:大红袍
--  发布时间:2016/5/8 11:23:00
--  

Do until Tables.Contains("表A")
    Application.DoEvents
Loop
msgbox("继续代码")


--  作者:HappyFt
--  发布时间:2016/5/8 16:36:00
--  
还是不可以,在导航的目录树单击的错码

LockBasemainform
Do until Canopen = True  \'等上一个窗口的代码运行完才能打开下一个窗口
    Application.DoEvents
Loop
Functions.Execute("OpenWindow",winName)  \'打开窗口名为点击节点名称的窗口
UnLockBasemainform

上面Canopen是个全局变量,默认为true,打开窗口的函数第一行就将Canopen = false,    然后在函数最后一行再将Canopen = ture 
目的就是必须Canopen = true时才能打开窗口。但为什么不行呢?

如果将代码直接改为
LockBasemainform
if Canopen = True  then \'等上一个窗口的代码运行完才能打开下一个窗口
    Functions.Execute("OpenWindow",winName)  \'打开窗口名为点击节点名称的窗口
end if
UnLockBasemainform

同时在函数的最后一行再加个msgbox对话框如:
Canopen = true
msgbox(111)   \'加上这一句每个窗口打开时显示它好象暂停一下似的就可以,不加就不行

老师要怎么办呢?




--  作者:Hyphen
--  发布时间:2016/5/9 8:31:00
--  
试试把Canopen = ture放到打开窗口的afterload事件最后一行
--  作者:大红袍
--  发布时间:2016/5/9 9:29:00
--  
以下是引用HappyFt在2016/5/8 16:36:00的发言:
 

上面Canopen是个全局变量,默认为true,打开窗口的函数第一行就将Canopen = false,    然后在函数最后一行再将Canopen = ture 
目的就是必须Canopen = true时才能打开窗口。但为什么不行呢?

 

你执行函数的时候才改变Canopen的值?那这短代码你要写在函数里面啊,而且,在执行的过程中,比如打开窗口后,修改Canopen的值。

 

Do until Canopen = True  \'等上一个窗口的代码运行完才能打开下一个窗口
    Application.DoEvents
Loop
 
你确实不会做,就上传实例。