with Tform.Create(Self) do是创建了一个无名窗体,如果不指定参数为Self或其它控件,而是Nil,你在退出With do结构后就再没有机会访问它了
连续的使用form1:=Tform1.Create(Self);的问题,我给举个风筝的例子你就明白了,TForm1好比是风筝的模板,Form1是那个放风筝的手,它只能拿一根线(因为实质是一个变量,2个字节)即使单独调用:
TFrom1.Create(self)
也能生成一个实例,但是没有可用于放飞的线,写成
form1:=Tform.Create(Self);
就是把线头放在Form1里面,再一次调用
form1:=Tform.Create(Self);
这时发生什么?你可以想到:扔掉了原来的那根线,换了个新的!但是这个新和旧的因为是一个模子出来的,肯定用起来一样,所以不会报错,但不原来的那个,一撒手就不好找回来了对不对?
正如墨剑所言,create(self)是要通知application的,在退出程序时会自动销毁。用create(nil)就要自己销毁。
我有个地方不同意,通知的不是Application,而有Form1本身,这就很悬了,让高手指点吧