在主窗体(form_main)上有如下菜单:
菜单1     菜单2
菜单1_1
......要求单击"菜单1_1"弹出form1(1) 如果在"菜单1_1"的事件过程中写如下代码
form1.Show
能正常显示form1(2) 如果在"菜单1_1"的事件过程中写如下代码
  form1:=Tform1.create(nil);
  form1.Show
则提示错误.请问为什么?
我看别人写的代码不直接用form1.Show,而是有form1:=Tform1.create(nil);或form1:=Tform1.create(application);
请问用哪一种形式好,如何正确书写代码?
谢谢啦!!!

解决方案 »

  1.   

    你要显示窗体,应该判断改窗体是否存在,如果已经创建,就直接显示,如果没有就创建后显示
    if not assing(Aform) then aform:=tform.create(application);
    aform.show;
    Tform1.create(nil);或form1:=Tform1.create(application);的区别在于窗体的所有者,如果是nil那么窗体的销毁就要有你来负责
      

  2.   

    如果窗体不存在
    就要用 建一个窗体实例
    form1:=Tform1.create(application);你可能已经在别的地方创过这个窗体,,
    楼上的方法,,,是先判断窗体是不是已经存在
    这样好一点
      

  3.   

    看看project>options>forms(面板里的) oato-create forms:
    里面是不是已经自己动创建的你的窗体
      

  4.   

    楼住的做法不应该是抱错,应该是会每次创建一个form1你把错误信息写出来
      

  5.   

    没觉得有错误,楼主你不会是没有引用“form1”的单元吧??!!
      

  6.   

    begin
      form1:=Tform1.create(self);
      form1.Show;
      form1.free;
    end
      

  7.   

    最好也不要
    begin
      form1:=Tform1.create(self);
      form1.Show;
    end
    改成
    var
      tmpform:Tform1;
    begin
      tmpform:=Tform1.create(self);
      tmpform.Show;
    end就要以随便怎么点都不会出问题了。