程序启动时所有子窗体默认都创建,主窗体显示菜单中加有MDI窗体的显示,目前想通过点击显示菜单下的菜单来控制子窗体的打开与关闭,程序代码如下:
procedure TForm1.N19Click(Sender: TObject);
begin
 if n19.Checked then
  begin
   n18.Checked:=false;
  end
 else
  begin
   winshow(tform6);
   n19.Checked:=true;
  end;
end;procedure TForm1.winshow(AClass: TComponentClass);
var i:integer;mk:boolean;frm1:tform;
begin
 i:=mdichildcount-1;
 mk:=true;
 while (i>=0) and mk do
  begin
   if (mdichildren[i] is aclass) then mk:=false
   else i:=i-1;
  end;
 if not mk then mdichildren[i].BringToFront
 else
  begin
   application.CreateForm(aclass,frm1);
   frm1.OnShow(nil);
  end;
end;procedure TForm6.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 action:=cafree;
 form1.n19.Checked:=false;
end;
现象如下,点击子窗体FORM6中的叉来关闭,再点击N19来打开窗体这没有问题,不会出错,如都通过点击N19来控制打开关闭窗体就会出错,不知是什么原因,请大家帮我看看。。
谢谢了

解决方案 »

  1.   

    procedure TForm1.Winshow(AClass:TComponentClass;KK:Boolean);
    var
    i:integer;
    Frm1:Tform;
    begin
    for i:=0 to  Form1.MDIChildCount-1 do
        if  (Form1.MDIChildren[i] is AClass) then
          begin
            if Not kk then
               Form1.MDIChildren[i].Close
            else
               Form1.MDIChildren[i].BringToFront;
            Exit;
          end;  Application.CreateForm(Aclass,Frm1);end;procedure TForm1.N19Click(Sender: TObject);
    begin  N19.Checked:=Not N19.Checked;
      Winshow(Tform6,N19.Checked);end;procedure TForm6.FormClose(Sender: TObject; var Action: TCloseAction);
    beginAction:=caFree;
    Form1.N19.Checked:=false;end;
      

  2.   

    BringToFront 实际没有用到N19控制子窗体打开/关闭,不是关闭就是创建,仅这两种情况!!!
      

  3.   

    to kaikai_kk 
    呵呵,谢谢了,问题解决了  送分。。