在MDI窗体中,怎样执行一个MDI子窗体打开之前关掉其他活动的MDI子窗体,并且当前打开的子窗体只能运行一次

解决方案 »

  1.   

    按照你的意思showmodal不是很合适吗,
      

  2.   

    按照你的意思showmodal不是很合适吗,
      

  3.   

    ChildForm不能ShowModal的
    不过楼主这样用
    不需要MDIChild
    所以还是可以用ShowModal
    至于只运行一次
    那就只能创建某个Form之后记录他的FormClass
    再打开时查找记录
    有记录就不让打开了
      

  4.   

    关闭所有窗口
    var
      LForm: array of TForm;
      iFormCnt,i: integer;
    begin
      iFormCnt := Application.MainForm.MDIChildCount;
      SetLength(LForm, iFormCnt);
      for i:=0 to iFormCnt-1 do
        LForm[i] := Application.MainForm.MDIChildren[i];  try
        for i:=iFormCnt-1 downto 0 do begin
          PostMessage(LForm[i].Handle, WM_CLOSE, 0, 0);
          Application.ProcessMessages;
        end;
      except
      end;
    end;
      

  5.   

    var i:integer;
    begin
      for i:=0 to MDIChildCount-1 do MDIChildren[i].Close;
    end;
      

  6.   

    To:楼上
    var i:integer;
    begin
      for i:=0 to MDIChildCount-1 do MDIChildren[i].Close;
    end;
    这段代码有bug,当关闭了一个窗口后,MdiChildrenCount会减1,MdiChildren[i]指向
    的窗口可能已经不存在了。给人家贴代码也要自己测试通过才行,光有热心不行
      

  7.   

    To:楼上
    var i:integer;
    begin
      for i:=0 to MDIChildCount-1 do MDIChildren[i].Close;
    end;改成:  for i:=0 to MDIChildCount-1 do MDIChildren[0].Close;就可以了 ...
      

  8.   

    首先谢谢指正!
    var i:integer;
    begin
      for i:=0 to MDIChildCount-1 do MDIChildren[i].Close;
      .......再在这里把要显示的FORM给SHOW出来
    end;