delphi 打开一个子窗体时关闭上另一个打开的子窗体.我在打开一个子窗体时判断是否有另外的子窗已经体开,如果有关闭已经打开的子窗体, 显示当前我要找开的子窗体.

解决方案 »

  1.   


    //======================================================
    //findfrm函數用來查找子窗體,若當前打開則在最前面顯示,否則打開
    //======================================================
    Function  findfrm(frmname:String): boolean;
    var i:integer;
    begin
         result:=false;
         for i:=0 to screen.FormCount-1 do
          if uppercase(screen.Forms[i].Name)=uppercase(frmname) then
          begin
           screen.Forms[i].BringToFront;
           result:=true;
           break;
          end
          else
          result:=false;
    end;
    //調用函數
    procedure Tmainfrm.N5Click(Sender: TObject);
    begin
          if not findfrm('auto_workfrm')  then
         begin
           auto_workfrm:=tauto_workfrm.Create(self);
           auto_workfrm.Show;
           end
          else
            auto_workfrm.BringToFront;
    end;
      

  2.   

    procedure TFrmMain.Sys_AboutExecute(Sender: TObject);
    var
      i: integer;
    begin
      for i:=0 to application.MainForm.MDIChildCount-1 do
      begin
        application.MainForm.MDIChildren[i].Close;
      end;
    end;
      

  3.   

    补充:
      if application.MainForm.MDIChildren[i].Name <>窗体名 then
    加个判断
      

  4.   

    TFrmMain.Sys_AboutExecute(Sender: TObject); 
    是那个事件 
      

  5.   


    {只能打开一个mdi窗体}
    try
      if application.MainForm.MDIChildCount>0 then{判断主窗体里面的子窗体个数是否大于0}
         activemdichild.Close;
    finally
         TForm2.Create(Self);{这是子窗体,MDIChild窗体自己创建自己显示,不用Show}
    end;
      

  6.   

    建议你用一个主窗体成员变量或用全局变量来保存你每次打开的当前子窗体句柄(FormXXX.Handle),
    当你要打开新的子窗体时,就先向你保存的上个子窗体句柄发WM_CLOSE消息来关闭它(用SendMessage),
    最后记得把你新开打的子窗体句柄继续保存,以供下次使用.
      

  7.   

      for i := 0 to Screen.FormCount - 1 do
        if screen.Forms[i].Owner = MainFrm then .. // 已有打开子窗//MainFrm.ActiveMDIChild.Close