我从网下下了一个程序.是这样创建的.var
 main1: Tmain;
begin
 main1:= Tmain.create();
 main1.show;
 main.free;
end;这样不就刚刚建完就析构了吗?可是程序还是可以照样运行.大家帮我讲讲这是怎么一回事.

解决方案 »

  1.   

    我是这样用application.createform(tform1,form)
      

  2.   

    var
     main1: Tmain;
    begin
     main1:= Tmain.create();
     main1.show;
     main.free;   <-- 这是main还是main1?
    end;
      

  3.   

    这样写吧
    var
     main:tmain;
    begin
     if not assigned(main) then 
        begin
         Application.CreateForm(Tmain,main);
      try
       Main.showmodal;
      finally
       FreeAndNil(Main);
    end;
    end
    else
      Main.show;
    end;
      

  4.   

    这没什么奇怪的,虽然刚调用了Show,马上又调用Free,其实,程序之所以能够继续执行,是因为Show语句还没有被执行完啊,只有Show执行完后,才能执行Free语句,也就是说当你执行了关闭Form后,Show才执行完,这一点,如果你通过单步调试程度就可以明白了
      

  5.   

    var
     main1: Tmain;
    begin
     main1:= Tmain.create();
     main1.show;
     main.free;   <-- 这是main还是main1?
    end;
    这个正解
      

  6.   

    TO: YangYun
    请不要胡说!show执行后立即返回!!!请你不要乱说。
    showmodel才是要等到窗口关闭后才返回。楼主你的FREE的是main不是mainl,所以窗口还在。