我现在有一个主窗口FrmMain,还有一个窗口Form2
现在的问题是FrmMain上面有一个按钮,当我单击按钮的时候,显示出Form2,但是必须显示出Form2后立刻释放FrmMain,怎么写这段代码啊?

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form2.Show();
      Self.Free;
    end;给分!
      

  2.   

    uses unit2;
    form2.show;
    form1.close;(form1.free)
      

  3.   

    Delphi是以工程为单位的,
    而每个工程至少要有一个main窗体,
    /project/options/forms下设置
    如果主窗体被close or free则程序中止所以我觉得可以设置frmmain为非main窗体
      

  4.   

    uses unit2;
    form2.show;
    form1.close;(form1.free)
    这样不行的~很明显,因为FORM1.FREE的话程序就终结了~
    我一般这样用
    form2.show;
    self.hide;
      

  5.   

    而且你后面写的Self.Free这句代码会引起程序异常,因为Form1被释放了两次,你先看一下我的前提是,Form1是主窗口,Form2是从窗口,你看看你的项目设置是否如此
      

  6.   

    to: bluejing0(此名已被占用!)
    现在的问题主要是Form1占用了很大的内存资源和GDI资源,我显示出Form2的时候就必须把Form1给释放掉,而不是隐藏,否则内存占用会占用14MB以上,如果去掉Form1,Form2只是占用了8MB左右
      

  7.   

    可以先隐藏了,等form2释放时再释放mainform
      

  8.   

    我想你的问题还是没有说清楚吧,我的两个From 都是自动创建的,当然怎么写都行的通,
    楼主你是说关闭第二个 Form 后应用程序不关闭吧,以楼主的智慧应该不是什么问题吧,
    Form2 的 OnClose 事件中 + 一句 Application.Terminate.如果楼主是想动态创建第二个 Form:
    procedure TForm1.Button4Click(Sender: TObject);
    begin
      Form2:=TForm2.Create(nil);
      Form2.Show;
      Self.Free;
    end;
    //同样要在 Form2 的 OnClose 事件中写上 Application.Terminate;
    //***注代码绝对测试过***
      

  9.   

    这样的方法太暴力了,如果Form1上面有Image并且Image里面有很大的图片的时候,你的方法就会报告内存访问异常,如果在Self.Free之前释放了Image就没有问题,但是方法过于暴力(我的意思是最后一个窗口里面的Application.Terminate;这句代码,各位有没有更加温柔的好办法,过于正常一点!实在不行我就用这种暴力解决办法
      

  10.   

    我明白了,楼主就是想解决掉 Form1 是么那这样你看行么?
    做一个傀儡主窗口体,也就是说把 FormMain 给替成其它的窗口,启动应用程序的时候创健它,但不显示它,用它来控制你现在的主窗体的显示,这样一来你现在的主窗口就和其它的 Form 没有什么两样,
    应该OK吧,这样一来给用户的感觉是完全一样的。嘿嘿,但是程序结构上有点恶心。