窗体打开与关闭的问题(72分)

  • 主题发起人 kidman520
  • 开始时间
K

kidman520

Unregistered / Unconfirmed
GUEST, unregistred user!
我在mainform中有多个button,点击button1,form1.show,点击button2,form2.show,
依此类推~
我现在想点击button前,判断一下,当前除了mainform外是否有别的form打开,如果有的话,先关闭,再打开我需要打开的form,也就是说,除了mainform外,只有一个form是打开的,应该怎么做呢?如何判断当前除了mainform外是否还有form处于show状态呢?如果关闭之?
 
A

angelgekko

Unregistered / Unconfirmed
GUEST, unregistred user!
如果是 MDI窗体的话,
for I := MDIChildCount-1do
wnto 0do
MDIChildren.Close ;
普通窗体的话,逐个判断一下。
if form1 <> nil then
form1.close;
 
X

xuxiaohan

Unregistered / Unconfirmed
GUEST, unregistred user!
你可以用isWindowsVisible判断每个Form,
isWindowsVisible(form2.handle) then
form2.close;
我已经没有分啦,如果你满意,给点分吧!
 
K

kidman520

Unregistered / Unconfirmed
GUEST, unregistred user!
晕,不是吧,要一个一个form的判断吗,我有几十个form呀,这样判断也太慢了吧,还有别的办法可以简单点的实现吗~
 
W

wsy539

Unregistered / Unconfirmed
GUEST, unregistred user!
if form1 <> nil then
form1.close;
并在Form1的close中
加入Form1:=nil;
 
K

kidman520

Unregistered / Unconfirmed
GUEST, unregistred user!
拜托大家,我有很多个form的,如果一个一个去判断,也有点太累了吧,我想问的是有没有简单的方法直接判断当前是否有form是show的,如果有,close it~
 
A

angelgekko

Unregistered / Unconfirmed
GUEST, unregistred user!
不是MDI?
 
K

kidman520

Unregistered / Unconfirmed
GUEST, unregistred user!
A

angelgekko

Unregistered / Unconfirmed
GUEST, unregistred user!
比较麻烦!
建议楼主建立子窗体时把窗体指针返入TList进行控制!
 
K

kidman520

Unregistered / Unconfirmed
GUEST, unregistred user!
to angelgekko:
能不能说的详细点?
 
S

sss174016

Unregistered / Unconfirmed
GUEST, unregistred user!
可以这样试一试,用变量CurrentForm将显示的窗体记录下来,当你要打开一个窗口时只需判断CurrentForm是否为空就行,如果不是,则CurrentForm.Close
 
K

kirinma

Unregistered / Unconfirmed
GUEST, unregistred user!
我记得好象是有一个FINDWINDOW的API不知道是不是可以完成你要的功能
 
A

angelgekko

Unregistered / Unconfirmed
GUEST, unregistred user!
等等,好像有个方法……
我先看看
 
K

kidman520

Unregistered / Unconfirmed
GUEST, unregistred user!
to sss174016:
CurrentForm这个是什么类型的变量呢?
 
A

angelgekko

Unregistered / Unconfirmed
GUEST, unregistred user!
用sss174016的方法可以保证只打开一个子窗体,
需要打开多个的话就要声明多个CurrentForm。
打开几个子窗体,试试下面程序,相信会对楼主有所启发的!
for i:=0 to componentcount-1do
showmessage(Components.ClassName);
 
K

kidman520

Unregistered / Unconfirmed
GUEST, unregistred user!
我觉得sss174016的方法也许可行,不过currentform该是什么类型的变量呢,在哪里声明呢,不太清楚,汗~~~
 
A

angelgekko

Unregistered / Unconfirmed
GUEST, unregistred user!
呵呵,currentform是个TForm类型!
当你打开一个子窗体,把currentform指向新建的子窗体,
当需要再建一个子窗体时,判断currentform是否为空,
是的话,创建新子窗体,把currentform指向新建的子窗体,
不是的话,先Close currentform 指向的子窗体;
然后创建新子窗体,把currentform指向新建的子窗体,
比较适合只允许一个子窗体的情况!
 

落木潇潇

Unregistered / Unconfirmed
GUEST, unregistred user!
你在mainform中定义一个全局变量
ActivChild:TForm;
在每个窗体创建时
if ActiveChild then
begin

ActiveChild.free;
ActiveChild:=0;
end;
ActiveChild:=form1;
form1.show;
再窗体close时
ActiveChild:=0;
再mainform中oncreate时
ActiveChild:=form1;//你想show得form
再mainform得构造函数中将ActiveChild请0
ActiveChild:=0;
 
A

angelgekko

Unregistered / Unconfirmed
GUEST, unregistred user!
“除了mainform外,只有一个form是打开的”
照楼主的意思,楼上两位的程序已经可以啦!
偶对关闭普通窗体的所有窗体很感兴趣,所以试了一下!
关闭当前窗口的所有子窗口!(非MDI)
for i:=0 to componentcount-1do
if Components.ClassParent.ClassName = 'TForm' then
TForm(Components).Close;
 
V

vmao

Unregistered / Unconfirmed
GUEST, unregistred user!
同意楼上!
form在application的components里面1
 

Similar threads

回复
0
查看
571
不得闲
S
回复
0
查看
617
SUNSTONE的Delphi笔记
S
S
回复
0
查看
696
SUNSTONE的Delphi笔记
S
顶部