Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 将变量从项目源传递到表单_Forms_Delphi_Variables - Fatal编程技术网

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的存在独立运行。