如何逐个关闭MDI中的子窗体?(50分)

  • 主题发起人 主题发起人 restart0
  • 开始时间 开始时间
R

restart0

Unregistered / Unconfirmed
GUEST, unregistred user!
我学会了单击某个子窗体的关闭按钮关闭它的办法,可是如何逐个关闭MDI中所有打开的子窗体?
试了一下不行
 
for i:=0 to MDICHildCount-1 do
MDIChildren.Close;
 
close只能最小化,不能关闭!
 
可以用free
for i:=0 to MDIChildCount - 1 do
MDIChildren.Free;
 
这个是用BCB写的,我做的一个茶房系统,自己翻译成DELPHI都差不多一看就明白
这个我为你加了注释
这个函数是判断窗体是否已经创建,如果创建则显示,未创建则返回FALSE
bool Tfmmain::openform(AnsiString fname)//建立窗口打开判断函数
{ bool pd;//PD就是判断的意思用来判断窗口是否已经打开
pd=false;
for (int i = MDIChildCount-1; i >= 0; i--)//用循环查找要打开的窗口是否已打开
if (MDIChildren->Name == fname)
{
pd=true;
MDIChildren->Show();
break;
}
if (pd==false)return false;
else return true;
}
这个是调用过程,这个函数必须配合这种调用写,如果不习惯你可以改下函数
void __fastcall Tfmmain::at_hyglExecute(TObject *Sender)//会员情况窗口建立
{
if (!this->openform("fmhyqk"))
{//以下是如果窗口未创建的话则
Tfmhyqk* t1; //申明T1为那个窗体类
t1=new Tfmhyqk(Application); //创建窗体
t1->Show();// 显示窗体//注意一下这里SHOW还有SHOWMODEL各有用处,看你情况换
}
}
还有最后一点用了代码创建得在其创建窗体的关闭事件里写Action=caFree;
不然会出错
void __fastcall Tfmhyqk::FormClose(TObject *Sender, TCloseAction &Action)
{
Action=caFree;
}
建议大家别在运行时就把所有窗体加载,这样速度和稳定上都有好处


 
定义一个
mdi窗体
onclose
action:=cafree;

然后所有的mdi窗体都继承这个窗体,

然后按上面各位的写法就可以了
 
在子窗体的onFormClose事件里写如下代码:
var
i:integer;
begin
action:=cafree;
for i:=0 to MDIChildCount - 1 do
MDIChildren.close;
end;
 
多人接受答案了。
 
后退
顶部