在同一个项目中,在Form1中当用户填完数据一按"确定"按钮时关闭Form1,打开另一个窗口Form2(不是新建一个Form2窗口,而是Form2还没运行),这样一步步来引导用户完成操作,怎样在Form1中注册Form2?我在"确定"按钮中这样写
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm2, Form2);
 close;
end;
错误提示:
[Error] Unit1.pas(28): Undeclared identifier: 'TForm2'
问:
这样是不是会新建一个窗口呀,这样不行,要调用已有的窗口。

解决方案 »

  1.   

    让FORM2先隐藏,在form1关闭后让2显示就行了
      

  2.   

    首先要应用 Form2
    Uses Form2procedure TForm1.Button1Click(Sender: TObject);
    begin
     Form2.Show; 
     close;
    end;
      

  3.   

    http://expert.csdn.net/Expert/topic/1665/1665505.xml?temp=.151272
    我也看了上面的贴子,还是搞不定,谢了,
      

  4.   

    同意 FSU(洋葱面) uses 编译时候会自动加上,不用自己写
      

  5.   

    我想:应该是主窗体没有设置好吧,如果你把FORM1做为主窗体的话,那么关闭后,程序当然会出错了。。
      

  6.   

    同意 FSU(洋葱面) 和coolhuaer(猴子用电脑)的说法。
    但是我个人认为如果传递数据的话用Form2.ShowModal比较好。
      

  7.   

    我到 主窗体都关闭啦子窗体还不关闭啊?可能嘛?
    其实楼上做的功能可以让form2显示的时候隐藏form1 如果form1关闭啦form2当然也关闭啦,道理很简单因为form1是主要的窗体嘛
    提供2中方法可以实现你的功能
    一、
    procedure TForm1.Button1Click(Sender: TObject);
    var
      MyForm:TForm2;
    begin
      myform := TForm2.Create(Self);//创建子窗体Form2;
      Form1.Hide; //隐藏主窗体
      try
        MyForm.ShowModal;
      finally
        MyForm.Free; //完成后释放
      end;end;
     二、该方法比较简单不用调用过多的窗体,因为过多的窗体会延缓系统的响应机制,你可以用一个PageControl控件,隐藏标题栏,用按钮控制PageControl的ActivePage,比如按钮标题为下一步,对应的事件为PageControl1.ActivePage:=TabSheet2; 可以解决你说的问题,这样处理起来比用多个Tform灵活,程序设计起来结构紧凑,推荐使用第二种方法
      

  8.   

    只要form1不是主窗口就可以先显示form2再close form1