本帖最后由 lx8888_2006 于 2010-11-08 20:52:28 编辑

解决方案 »

  1.   

    procedure Tform1.Button1Click(Sender: TObject);
    begin
      
      if Application.MessageBox('这样就好','提示',MB_OKCANCEL)=IDOK then
      begin
        Application.CreateForm(Tform2,form2);
        try
          form2.ShowModal;
        finally
          form2.Free;
        end;
      end;
    end;注意:去掉IDE的窗体自动生成
      

  2.   

    !  else 里写了form2.close 当然就关了呀
      

  3.   


    我也这样写的,不过点选否之后,form2照样打开了
      

  4.   

    procedure Tform1.Button1Click(Sender: TObject);
    begin
      if not Assigned(form2) then
        Application.CreateForm(Tform2,form2);
      try
        if Application.MessageBox('这样就好','提示',MB_OKCANCEL)=IDOK then
          Form2.ShowModal;
      finally
        FreeAndNil(form2);
      end;
    end;建议楼主要及时结贴!
      

  5.   

    小弟刚学,发表一下自己的关点,不管对不对,沟通最重要,不对你们也可以帮我纠正,这样我也学习了我认为楼主的事件应该写在fromcreate中,然后在else中上窗体关闭语句
      

  6.   

    1、先写个公用函数
    function XXX.MyFindChild(MyFormName: string): Boolean;
    var i,j:integer;
    begin
    //查找子窗体,如果子窗体未打开返回真;
    //如果子窗体存在,则将其显示在最前;
    //如果子窗体在最小化,则将其恢复普通状态。
       i:=Application.MainForm.MDIChildCount ;
       Result :=true;
       for  j:=0 to i-1 do
          if Application.MainForm.MDIChildren[j].Name
               =MyFormName then
            begin
             Result :=false;
             Application.MainForm.MDIChildren[j].BringToFront ;
             if  Application.MainForm.MDIChildren[j].WindowState=wsMinimized then
                 Application.MainForm.MDIChildren[j].WindowState:= wsNormal;
            end;end;
    2、在你要调用处写  if MyFindChild('XXXXFORM') then
        Application.CreateForm(TXXXXFORM, XXXXFORM);3、你的问题
    procedure Txxx_Main.Button1Click(Sender: TObject);
    begin
    if  Application.MessageBox('确定要打开XXXX','提示',
                   MB_OKCANCEL +MB_SYSTEMMODAL+MB_ICONINFORMATION)=mrCANCEL  then exit;  if MyFindChild('XXXXFORM') then
        Application.CreateForm(TXXXXFORM, XXXXFORM);
    end;
     
    PS:子窗体是不能用ShowModal的
     
      

  7.   

    再一个就是,你在窗体中的Close事件中一定要加入下列代码;
    procedure TXXXXFORM.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
     Action:=caFree;
     XXXXFORM:=nil;  //这句是一定要的,要不然,窗体是不会完全释放的
    end;
      

  8.   

    你的判断操作应该放到Tform1.Button1Click里。
      

  9.   


    他的窗体不是封装在DLL中吧!