错误的代码,因为form1 show时始终执行了create事件,该free被忽略

解决方案 »

  1.   

    FORM不是先执行create,然后才show吗?
      

  2.   

    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
     Action:=caFree;
     with TFrom3.Create(Application)
      begin
        ShowModal;
        Free;
      end;
    end;
      

  3.   

    procedure TForm2.Button1Click(Sender:TObject)      ¦-----------
    begin                       ¦    
      Hide;  
      //A:Close; (此时我想调用TForm2的方法关并释放Form2,即---)
      with TFrom3.Create(Application)
      begin
        ShowModal;
        Free;
      end;
      Close; 
    end;
      

  4.   

    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
       Action:=caFree;
    end; 
    procedure TForm2.Button1Click(Sender:TObject)      
    begin                      
      Close; 
    end;procedure TForm2.OnDestory(Sender:TObject)
    begin
      TForm3.Create(Application);
      TForm3.ShowModal;
    end;
      

  5.   

    to Apollo47(阿波罗):老兄的代码并不能关闭Form2,不知老兄是否试过才贴上来的.to Musicwind(风里来雨里去).Hide可以"关闭"(隐藏),但不知能否释放掉呢?to ljhsoft(刘建华):TForm3.Create(Application);
      TForm3.ShowModal; 这两句代码能编译过吗?
      

  6.   

    Application.CreateForm(TForm3, Form3);
    Form3.showmodal;
    Form3.free;
      

  7.   

    to tzp(tangzhupeng);老兄的代码能关闭FORM2吗?再次麻烦各位,请您测试过后再贴上来行不,如果不明白我的意思,可以说一下.
    请不要再贴一些无用的代码,以免浪费论坛的空间!!
      

  8.   

    奇怪的问题,得到奇怪的答案
    tform1:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      try
        with Tform2.Create(application) do
         showmodal;
      except end;
    end;tform2:
    procedure TForm2.Button1Click(Sender: TObject);
    begin
      with TForm3.Create(application) do
        ShowModal;
    end;tform3:
    procedure TForm3.FormActivate(Sender: TObject);
    var
      i:integer;
    begin
      for i:=0 to application.ComponentCount -1 do
        if application.Components[i] is tform2 then
        begin
          enablewindow(tform2(application.components[i]).handle,true);
          tform2(application.components[i]).free;
          break;
        end;
    end;procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
    var i:integer;
    begin
      action := cafree;
      for i:=0 to application.componentcount-1 do
        if application.components[i] is tform3 then
        begin
          enablewindow(tform(application.components[i-1]).handle,true);
          break;
        end;
    end;
      

  9.   

    To yukuang:
       Hide以后,暂时隐藏,然后生成Form3,处理结束后,
      再次调用 Close,注意,此处调用,将使程序的流程转到Form2.ShowModal句子以后
      (结束了Form2 ShowModal以后的消息循环),接下来就是Free了。
      没有问题!
      

  10.   

    是不是动态创建的Form,如果它的Owner是Application的话,不用人工写代码释放?
      

  11.   

    是不是动态创建的Form,如果它的Owner是Application的话,不用人工写代码释放? 是的,不过内存会越来越少,除非退出程序然后再进入
      

  12.   

    所有从TCustomForm派生的类创建的窗口都不用管,程序关闭后会自动释放,这些窗口的指针保存在TScreen的CustomForms[]里面,这就是用VCL的好处,不然还要自己释放资源,万一忘了多不好。