DELPHI中MDI子窗口的关闭和打开

DELPHIMDI子窗口的关闭和打开

DelphiMDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭。解决办法是在子窗口的OnClose事件处理过程中加入如下代码,示例:

 

procedure ChildForm.OnClose(Sender: TObject; var Action: TCloseAction);

begin

   Action := caFree;

end;

  

 

Delphi为一个Form的关闭行为指定了四种方式,分别是:

caNone     禁止Form被关闭

caHide     Form不被关闭,但是被隐藏。被隐藏的Form仍然可以被程序访问。

caFree     Form被关闭,并且释放其占用的资源。

caMinimize  Form被最小化而不是被关闭,这是MDI子窗口的默认关闭行为。

 

===========================================================

MDIForm调用MDIChild窗体时要这样用  

引用

 

   if   not   Assigned(Form2)   then   begin  

               Form2:=TForm2.Create(Self);  

               Form2.Show;  

         end   else  

Form2.BringToFront;  

      

   另外在MDIChildOnClose,   OnDestroy中要以下代码   Form2MIDChild窗体的名称  

   procedure   TForm2.FormClose(Sender:   TObject;   var   Action:   TCloseAction);  

   begin  

         Action:=caFree;  

   end;  

      

   procedure   TForm2.FormDestroy(Sender:   TObject);  

   begin  

         Form2:=nil;  

   end;    

=================================================

如何获得当前打开的子窗口的数量?

Application.MainForm.MDIChildCount

 

==================================================

怎么关闭所有打开MDI子窗体?

 

除了在主窗体写入  

   procedure   TFrmMain.N15Click(Sender:   TObject);  

   var   I:integer;  

   begin  

         if   Application.MessageBox('确定要关闭所有窗口吗?','System',mb_iconinformation+mb_yesno)=id_yes   then  

         begin  

         for   I:=MdiChildCount-1   downto   0   do  

         MdiChildren[I].Close;  

         end;  

   end;  

      

   还要在各个子窗口写入  

   procedure   TFrmchildn.FormClose(Sender:   TObject;   var   Action:   TCloseAction);  

   begin  

         action:=cafree;  

       Frmchildn:=nil;        

   end;  

 

procedur TFrmchildn .FormDestroy(Sender:   TObject);  

     begin  

           TFrmchildn:=nil;  

     end;  

 

 

=================================================

根据以上的测试,有效代码:

主窗体:

引用

 

procedure TForm1.a2Click(Sender: TObject);

begin

if Assigned(Form2) then

 

   begin

Form2.Close;

   end;

 

end;

 

procedure TForm1.a3Click(Sender: TObject);

begin

   if not Assigned(Form2)   then //判断子窗体是否已打开

   begin

   Form2:=TForm2.Create(Self);

   Form2.Show;

   end

   else Form2.BringToFront;

end;

 

子窗体:

引用

 

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Action:=caFree;

end;

 

procedure TForm2.FormDestroy(Sender: TObject);

begin

Form2:=nil;

end;

 

转载于:https://www.cnblogs.com/bingege/archive/2011/08/24/2152539.html

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

参与评论
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值