在MDI的主窗口内:
procedure TfrmMain.showform(FormClass: TFormClass);
var
  i: integer;
begin
  for i := 0 to self.MDIChildCount - 1 do
    if (MDIChildren[i] is FormClass) then //判断子窗体是否打开
    begin
      self.MDIChildren[i].BringToFront;
      MDIChildren[i].SetFocus;
      Exit;
    end;
  FormClass.Create(self);
end;关闭子窗口:
procedure Tfrmcbcx.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  action := cafree;//加上这句
end;此时用close;就可以关闭了。

解决方案 »

  1.   

    判断子窗体是否打开
    flag:=0;
    if i:=0 to     mainform.MDIChildCount-1 do
        if uppercase(mainform.MDIChildren[i].Name)='YOURFORM' then
          flag:=1;// 子窗体已打开if flag=1 then yourform.close;
      

  2.   

    var
      i:integer;
    begin
     for i:=1 to  form1.MDIChildCount do
     begin
       if form1.MDIChildren[i-1].Visible =false then
             form1.MDIChildren[i-1].Visible:=true;
        form1.MDIChildren[i-1].WindowState :=wsNormal ;
     end;end;
      

  3.   

    关闭
    :
    在子窗体的onclose事件中加:action:=cafree;但关闭后,就释放掉了,也就是说form1.MDIChildCount 会减少1