注册 登录
编程论坛 VFP论坛

大师门,Vfp如何关闭或显示父窗口及下面的所有子窗口?

liunis 发布于 2021-09-25 21:37, 3523 次点击
Showwindowasync(thisform.hwnd),这只能关闭指定的窗口,但关不了此窗口派生的所有子窗口。是不是一要枚举?窗口众多运行大慢
17 回复
#2
liunis2021-09-25 21:59
应该是说隐藏和显示
#3
xs5912222021-09-26 08:16
试一下
窗口的命名加一个数字顺序,然后有一个循环来关闭。
#4
liunis2021-09-26 12:40
不理想,大烦所,页面多
#5
吹水佬2021-09-26 14:47
“此窗口派生的所有子窗口”是什么意思?
可否具体说说派生子窗口的过程和代码
#6
gs25367856782021-09-26 15:12
只能一个个地关闭
#7
liunis2021-09-26 15:52
是这样子的。比如do form my form.scx,作为顶层表单,此时生成一个窗体,在此表单再打开2个表单(在顶层表单中),就成了一个父窗体id,及2个子窗体i’d.有什么快速方法隐藏父窗体时连2个子窗体一起隐藏呢(不是关闭),在需要时又一起恢复显示呢?在很多表单打开时就会变得很烦所易出错。如果同时打开10个表单,在这基础又打开许多表单,那么隐藏其中一个父表单时连同此父表单下的子表单一起隐藏,这如何能做到?
#8
liunis2021-09-26 16:07
只有本站会员才能查看附件,请 登录
#9
吹水佬2021-09-26 17:03
测试好象没问题
设主窗口作为顶层表单,子窗口设为在顶层表单中,隐藏主窗口就可以。
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#10
liunis2021-09-26 17:55
不是这样。如下图及例子
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#11
xuminxz2021-09-26 20:33
你这些表单不是子表单与父表单的关系啊。
#12
liunis2021-09-26 20:43
是的,表单2是父表单,表单3,表单4,N个表单,是表单2的子表单。就是隐藏表单2时,表单3,表单4,N个表单一起隐藏
#13
xuminxz2021-09-26 20:49
3、4……下面没有了吧?
如果是这样用表单集就可以了,否则,要说清你可能的调用顺序的排列组合方式,然后做一个专门的函数,用于隐藏与显示表单。

[此贴子已经被作者于2021-9-26 20:52编辑过]

#14
liunis2021-09-26 20:54
就是因为不能用表单集,因为加载数据大多,显得慢,不需要的表单也一起加载了。用隐藏的方法,表单需要那一块就加载一次,需要时显示出来,这样速度快
#15
吹水佬2021-09-26 20:57
回复 10楼 liunis
表单2与表单3...看就不象是父子关系
在表单1的控制代码里遍历表单2、3、......设置表单对象的Visible就可以
#16
liunis2021-09-26 21:12
但是在 表单1 里打开表单2,表单3后,不用表单集的情况下,在没有关闭表单2,表单3时,焦点在表单1时如何能访问到表单2的VISIBLE?
#17
吹水佬2021-09-26 21:36
回复 16楼 liunis
** 隐藏时
FOR EACH of in _screen.Forms
    IF of.caption != "表单1"
        of.Visible = 0
    ENDIF
ENDFOR

** 显示时
FOR EACH of in _screen.Forms
    IF of.caption != "表单1"
        of.Visible = 1
    ENDIF
ENDFOR
#18
liunis2021-09-27 17:15
用多几个顶层表单,然后点新表单时把旧的顶层表单隐藏了,基本避开表单集及反复加载数据
1