Forms 将变量从项目源传递到表单
在创建表单之前,我在项目源代码中加入了一些逻辑。如果满足某些条件,我将继续创建表单。逻辑正在生成我需要传递给表单的数据,比如说一些变量。我在表单的公共部分声明了这些变量,但是我找不到传递这些值的方法,因为变量需要创建表单才能存在。Forms 将变量从项目源传递到表单,forms,delphi,variables,Forms,Delphi,Variables,在创建表单之前,我在项目源代码中加入了一些逻辑。如果满足某些条件,我将继续创建表单。逻辑正在生成我需要传递给表单的数据,比如说一些变量。我在表单的公共部分声明了这些变量,但是我找不到传递这些值的方法,因为变量需要创建表单才能存在。 有办法吗?我正在使用Delphi2007。您是如何创建表单的 您可以这样做: f := TMyForm.Create(Application) f.MyProperty := 10; f.Show; 关于。我建议在满足条件后设置这些变量 运行你的逻辑 检查情况 创建
有办法吗?我正在使用Delphi2007。您是如何创建表单的 您可以这样做:
f := TMyForm.Create(Application)
f.MyProperty := 10;
f.Show;
关于。我建议在满足条件后设置这些变量
var
MyVariable1 : integer;
MyVariable2 : integer;
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
//some logic to assign variables
//...
//create form and set variables only if condition is met, example:
if(MyVariable1 + MyVariable2 > 10) then
begin
Application.CreateForm(TForm1, Form1);
Form1.MyVariable1 := MyVariable1;
Form1.MyVariable2 := MyVariable2;
end;
Application.Run;
end.
TForm1 = class(TForm)
private
{ Private declarations }
public
MyVariable1 : integer;
MyVariable2 : integer;
{ Public declarations }
end;
格式来源:
var
MyVariable1 : integer;
MyVariable2 : integer;
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
//some logic to assign variables
//...
//create form and set variables only if condition is met, example:
if(MyVariable1 + MyVariable2 > 10) then
begin
Application.CreateForm(TForm1, Form1);
Form1.MyVariable1 := MyVariable1;
Form1.MyVariable2 := MyVariable2;
end;
Application.Run;
end.
TForm1 = class(TForm)
private
{ Private declarations }
public
MyVariable1 : integer;
MyVariable2 : integer;
{ Public declarations }
end;
您可以在表单单元中声明全局变量,并在表单单元中使用它 您可以在任意位置设置全局变量
TForm9 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
MyLocalVar : Int64;
end;
var
Form9: TForm9;
MyGlobalVar : Int64;
implementation
{$R *.dfm}
procedure TForm9.FormCreate(Sender: TObject);
begin
MyLocalVar := MyGlobalVar;
end;
为什么不能创建表单并设置这些变量?标准的方法是在表单中有两个方法,
SetInterface
和GetInterface
。创建表单后,在调用Show/showmodel
之前,调用SetInterface
,它将传输所有要设置的参数。当表单关闭时,调用GetInterface
从表单中获取参数。为了避免太多的输入,我经常将所有参数放在一个记录中,并将记录传递给方法。您也可以对属性执行相同的操作,但这也需要大量的键入,并且使用SetInterFace/GetInterface
范式可以清楚地了解如何使用表单。我将更好地解释:我有一个计划项目,可以单独启动,也可以通过另一个主表单启动。在创建调度时运行一个查询,其结果显示在其窗口中。当运行另一个MainForm时,它做的第一件事就是运行相同的查询,以知道是否调用调度程序。如果没有,则不会调用并显示调度程序。否则,它会再次运行并执行相同的查询……您是否测试了如果语句不执行,并且您调用应用程序时会发生什么情况?运行时,不创建主窗体?@KenWhite:没有什么不好的事情发生(Delphi 2007),它在内部调用“AddExitProc(DoneApplication);”在检查主窗体是否已分配之前。由于这个原因,“DoneApplication”在应用程序终止时执行。“DoneApplication”隐藏弹出菜单、提示,并调用Destroying和DestroyComponents。在他的逻辑中,可能已经创建了一些组件,所以我认为调用Application.Run更为正确。从mainform的存在独立运行。