if MDIChildCount>0 then
  ActiveMDIChild.Close ;
NewMidChildForm.Creat;

解决方案 »

  1.   

    Delphi中可以新建一个MDI Application(在new->projects中),其中就有关闭所有childform的语句,你自己看一下,一定能够得到启发。
      

  2.   


    土方法:两个菜单项,一个主Form1,两个子Form2、Form3。菜单事件:procedure TForm1.N11Click(Sender: TObject);
    begin
      if Assigned(Form3) then
      begin
        Form3.Free; Form3:=nil;
      end;
      if not Assigned(Form2) then Form2:=TForm2.Create(self);
      Form2.Show;
    end;procedure TForm1.N21Click(Sender: TObject);
    begin
      if Assigned(Form2) then
      begin
        Form2.Free; Form2:=nil;
      end;
      if not Assigned(Form3) then Form3:=TForm3.Create(self);
      Form3.Show;
    end;
      

  3.   

    用我下面的函过程
    procedure OpenMdiForm(FormClass: TFormClass; var fm; AOwner:TComponent);
    var
      i: integer;
      Child:TForm;
    begin
      for i := 0 to Screen.FormCount -1 do
          if (Screen.Forms[i].ClassType=FormClass) then
          begin
            Child:=Screen.Forms[i];
            if Child.WindowState=wsMinimized then
               ShowWindow(Child.handle,SW_SHOWNORMAL)
            else
               ShowWindow(Child.handle,SW_SHOWNA);
            if (not Child.Visible) then Child.Visible:=True;
            Child.BringToFront;
            Child.Setfocus;
            TForm(fm):=Child;
            exit;
          end;
      Child:=TForm(FormClass.NewInstance);
      TForm(fm):=Child;
      Child.Create(AOwner);
    end;你要打开一个子窗口时openmdiform(mdiform,mdichildform,self)
      

  4.   

    对不起我没有看清题目,刚才那个错了,在控纽中加入如下代码
    var 
     i:integer;
    begin 
      if mdiform.mdichildcount > 0 then begin 
         for i := 0 to mdiform.mdichildcount do begin 
            mdiform.child[i].close;
         end;
       end;    //关闭已存在的窗口
           mdichileform.show;
    end;
      这个代码还有一个问题,当已有的子窗口就是要打开的窗口,代码你应先判断一下是否有你要打开的窗口存在,方法就是我上一个中用的
      

  5.   

    我认为StarRains(星雨)的方法有理,不过我也有点自己的看法
    可以这么写
    procedure TMainForm.FileNew1Execute(Sender: TObject);
    var
       frmcnt :integer;
    begin
       if mdichildcount>0 then do
       begin
          for frmcnt=1 to mdichildcount do
                MDIChildren[frmcnt].Close;
          CreateMDIChild('你的子窗体的名称');
       end;
    end;其实不难吧!
      

  6.   

    不好意思,打错了!应该是
    procedure TMainForm.FileNew1Execute(Sender: TObject);
    var
      frmcnt :integer;
    begin
       if mdichildcount>0 then
         for frmcnt:=1 to mdichildcount do
                MDIChildren[frmcnt].Close
      else
         CreateMDIChild('你的子窗体的名称');
       
    end;
      

  7.   

    其实他的意思就是要:
    if mdichildcount=1 then MDIChildren[0].Close;//既然只能有一个活动,就没有必要判断多个了!!
      
      

  8.   

    jin_fei(金飞)的第一张贴子应该可以解决你的问题,,但是他的最后Child:=TForm(FormClass.NewInstance);
      TForm(fm):=Child;
      Child.Create(AOwner);
    不知道在干什么。。希望jin_fei(金飞)能告之一下,,,
      

  9.   


      如果我要在 主form 显示一张jpg图片,用image控件。
      
      我该怎么做呢?怎么老是显示不出来呢??
      

  10.   

    我的第一张贴子的意思是一个MDIFORM,可能有好几个MDICHILDFORM,但是有时候我可能需要我可以一个类的child只要一个,(在数据库方面比较多,如工资窗口和仓库窗口等),就用这一个过程。
    (刷新一下) 的现在意思是MDIFORM只能有一个子窗口,那么打开其它的窗口之前我是要先判决一下此窗口是不是已打开的,(不然关掉再打开不爽),如果不是再关闭后再打开,所在我觉得正确的是先判断一下,至于方法第一个中有然后再根据结果执。
    skypeople(飞飞)要问的内容意思是新建一个,倘若近按我上所述,此处应是关闭后,再新建加一名关闭代码?
      

  11.   


      感谢jin_fei指教。  如果我要在 主form 显示一张jpg图片,用image控件。
      
      我该怎么做呢?怎么老是显示不出来呢?? 
      

  12.   


      谢谢wangzh,我也来提前一下
      

  13.   

    试一试,包你满意!!!
    procedure OpenForm(FormClass: TFormClass; var fm; AOwner:TComponent);
    var
      i: integer;
      Child:TForm;
    begin
      for i := 0 to Screen.FormCount -1 do
          if Screen.Forms[i].ClassType=FormClass then
          begin
            Child:=Screen.Forms[i];
            if Child.WindowState=wsMinimized then
               ShowWindow(Child.handle,SW_SHOWNORMAL)
            else
               ShowWindow(Child.handle,SW_SHOWNA);
            if (not Child.Visible) then Child.Visible:=True;
            Child.BringToFront;
            Child.Setfocus;
            TForm(fm):=Child;
            exit;
          end;
      Child:=TForm(FormClass.NewInstance);
      TForm(fm):=Child;
      Child.Create(AOwner);
    end;
      

  14.   

     to: zhaowin(可可) 谢谢你的解决方案,但是对于那个图片的问题,我该如何解决呢? 狂人恳请高手指教。。