zoukankan      html  css  js  c++  java
  • 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;

     

  • 相关阅读:
    Runoob-Java:Java 开发环境配置
    公司-科技:JotSpot
    服务-WiKi:WiKi
    国际组织-Java:JCP
    Java:Java 简介
    Runoob-Java:Java 教程
    oracle-ofa
    HTML5 viewport 标签与 CSS3 background-size 属性 使图片完全适应区域内容
    Android studio怎么导入Recycler VIew
    Android studio怎么导入Recycler VIew
  • 原文地址:https://www.cnblogs.com/bingege/p/2152539.html
Copyright © 2011-2022 走看看