Forms 如何在delphi中初始化用designer创建的表单?

Forms 如何在delphi中初始化用designer创建的表单?,forms,delphi,Forms,Delphi,例如,如果我有一个表单是用designer创建的,而我想要另一个单独的表单,但它可以作为我的全屏工作,那么如何初始化表单。第二个表单也有我想要写入的参数,但是我得到了访问冲突 我目前正试图在第一个表单的formcreate方法中访问这些第二个表单变量。但是就像我说的,我得到了访问冲突,所以我猜我需要初始化第二个表单来访问该表单中的变量,但我不知道如何做,合适的方法是什么,你做错了。您不应该让一个窗体的初始化依赖于另一个窗体的存在。你应该做三件事中的一件: 1) (首选)将字段从TForm2移出到

例如,如果我有一个表单是用designer创建的,而我想要另一个单独的表单,但它可以作为我的全屏工作,那么如何初始化表单。第二个表单也有我想要写入的参数,但是我得到了访问冲突


我目前正试图在第一个表单的formcreate方法中访问这些第二个表单变量。但是就像我说的,我得到了访问冲突,所以我猜我需要初始化第二个表单来访问该表单中的变量,但我不知道如何做,合适的方法是什么,你做错了。您不应该让一个窗体的初始化依赖于另一个窗体的存在。你应该做三件事中的一件:

1) (首选)将字段从TForm2移出到单元中定义的非表单类,该单元包含在Form1.PAS和Form2.PAS中,然后从TForm1.FormCreate中创建

2) (仅当您无法执行1)延迟访问Form2的字段,直到Form1的OnActivate,并确保OnActivate只调用一次:

PROCEDURE TForm1.OnActivate(Sender : TObject);
  BEGIN
    OnActivate:=NIL;
    <Access Form2.Field>
  END;
过程TForm1.OnActivate(发送方:TObject);
开始
OnActivate:=零;
终止
3) (仅当1或2可撤消时)在Form1的FormCreate中实例化Form2(并将其从自动创建的表单中删除):

过程TForm1.FormCreate(发送方:TObject);
开始
Application.CreateForm(Form2,TForm2);//或Form2:=TForm2.Create(应用程序);
终止

在这三个选项中,1)是绝对可取的…

是否要动态创建和显示在IDE中设计的表单?如果是这样的话,你想以模式还是非模式显示它?我有一个表格是我的应用程序,我制作了一个单独的全屏输出表格。我需要初始化第二个表单,因为我无法访问第二个表单中的变量(访问冲突)。我不知道我需要在哪里初始化它,以及我应该如何初始化它。到目前为止,我已经完成了
form:=TForm.CREATE(nil)但它似乎不正确。我甚至需要为设计器创建的表单执行此操作吗?@RolandasUlevicius您需要创建()您设计的派生表单,而不是创建
TForm
本身,它是一个空白的基类<代码>表单:=tmyfullscreensoutputform.Create(nil)(使用您实际命名的名称)如果我调用例如TForm2.create,它将是默认构造函数?您不应该调用TForm的默认(无参数)构造函数。我需要依赖于其他表单的存在。我知道你的意思,但form2是我的全屏输出。谢谢你的回答,不过我会使用第三个,因为这个应用程序非常小,我不打算扩展它。
PROCEDURE TForm1.FormCreate(Sender : TObject);
  BEGIN
    Application.CreateForm(Form2,TForm2); // Or Form2:=TForm2.Create(Application);
    <Access Form2.Field>
  END;