我想实现点击一个窗体上的一个按钮,然后就出现一个新的窗口,以下是我的代码
form2 := TForm2.Create(self);
form2.ShowModal;
form2.Free;
这种写法没有一点问题,但是我一旦把form2.ShowModal改为form2.Show之后,窗体只是闪了一下就消失了,如果不要后面的form2.Free就没有问题,但是,如果不写后面的语句,岂不是内存没有释放,请教大家!

解决方案 »

  1.   

    1、如果form2.ShowModal;
       那么要等到form2关闭返回ModalResult 后才执行form2.Free;语句,
       所以你可以看到这个模式窗口;
    2、如果form2.Show,那么会接着执行form2.Free;所以
      “窗体只是闪了一下就消失了”
      

  2.   

    如果是Show的话,你可以在Form2窗体里面的FormClose事件里面写:
     Action := caFree;
    即可释放!
      

  3.   

    我想实现的操作就是在一个FORM上,点击一个按钮,然后就出现另一个FORM,就如同记事本的查找命令一样。
    如果不Free,会存在申请的内存没有释放的问题吗?
      

  4.   

    Show的这种方式是非独占方式打开,即打开多少个其他窗体都行,又可以在任一个窗体上操作,那就只能是在其他窗体关闭的时候释放,要不Form1怎么会知道什么时候释放呢。
      

  5.   

    FORM。SHOW和FORM。FREE一般不能连用除非要你这样的效果!
      

  6.   

    ShowModal是模态窗口, 不返回时不能执行下面的语句(free). 
    而Show是非模态窗口,打开后可以点击到别的窗口上的控件, 它执行后,直接运行下面的语句(free). 而free语句是将这个窗口释放, 所以闪一下就没了可在那个窗口里再加一个按钮来关闭就行了
      

  7.   

    ShowModal 关闭是会有一个返回值!
    而SHow没有。
      

  8.   

    没关系的,Form2的Owner是Form1,在Form1被释放的时候Form2会被释放的,
    不过如果你的代码多次执行的话肯定会占用许多不必要的内存资源。