应该是
form2 := Tform2.create(nil);
form2.showmodal;
form2.free;
因为你是动态创建的吧

解决方案 »

  1.   

    读地址错误 通常是属于保护性错误 比如动态创建窗体的时候你又尝试去关闭它,
     不过就你的程序似乎不会出什么错误? form2:=tform2.create(nil);应该没错。
      

  2.   


     with TFrom2.Create(application) do
     try
       ShowModal;
     finally
       Free;
     end;
      

  3.   

    呵呵,如果是Button的事件处理中建非模式窗体,最好先判断是否已建过,
    你的程序看起来好像没什么问题,但你要注意几点,可写成:if Form2 = nil then Form2 := TForm2.Create(nil);
    if (Form2 <> nil) and (not Form2.Visible) then
    begin
      Form2.Show;
      Form2.BringToFront;
    end;Form2就是个全局变量, 且,最好在Form1的OnClose或OnDestroy事件中写:
    if (Form2 <> nil) and (Form2.HandleAllocated) then FreeAndNil(Form2);
      

  4.   

    我用参数nil,application,self都试过
    我以前也是这样用的但没有错
      

  5.   

    你声明变量了吗?
    var
    form2:Tform2;
    如果没有请加上,或者将TFrom2.Create(..)改为application.createform(tform2,form2);
      

  6.   

    应该没有问题.
    try
       form2:=Tform2.create(nil);
       form2.showmodal;
       form2.free;
    except
       form2.free;
    end;
      

  7.   

    project/options,   确定你的FORM2在右边的AVALID FORMS里.
      

  8.   

    to shangshang 
       
              这种方法我用过,没用
      

  9.   

    我认为:
    要在form1的运行中产生form2,那么首先得在form1的uses中声明form2,比如:
    uses
    unit2;另外,动态生成窗体可以试试下面这一段代码:
    application.create(tform2,form2);
    form2.showmodal;而用完释放时,可在form2的colse事件中使用:
    action:=cafree;
    这样可以不占系统资源!
    至于你所说的那种方法,直到现在小弟还没用过!
    但这种方法也不失为一种好的动态产生窗体的方法!