FormCreate过程

FormCreate procedure

我的项目中有两个单元如下:

1 - 连接单元:

unit Connexion;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TFConn = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  FConn: TFConn;

implementation

{$R *.dfm}

uses MainForm;

procedure TFConn.Button1Click(Sender: TObject);
begin
  if not Assigned(FMain) then
    begin
      FMain := TFMain.CreateNew(Application);
      FMain.OnClose := FMain.FormClose;
      FMain.ShowModal;
    end;
end;

end.

2 - MainForm 单元:

unit MainForm;

interface
   uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TFMain = class(TForm)
     Constructor  FormCreate(Sender: TObject);overload;
     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  end;
Var
  FMain : TFMain;
implementation

Constructor  TFMain.FormCreate(Sender: TObject);
var B :  TButton;
begin
   inherited;
   B := TButton.Create(Self);
   B.Parent := Self;
   B.Caption := 'Button2';
end;

procedure tfmain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FMain := Nil;
end;
end.

问题是 MainForm 单元中的程序 FormCreate 不工作,我知道我在声明中漏掉了一些东西,因为程序应该在创建 FMain 表单时触发。

应用程序 运行 没有任何错误,但它应该在 FMain 表单上创建 B 按钮。

我该怎么做?

Constructor  FormCreate(Sender: TObject);overload;

错了。应该是:

procedure FormCreate(Sender: TObject);

另一个问题是您必须设置 OnCreate 事件来引用 FormCreate。在对象检查器的事件页面中执行此操作。

这还需要您拥有此表格的 dfm 文件,而您似乎没有。恢复 dfm 文件后,您可以用相同的方式设置 OnClose 事件处理程序。您需要切换到 Create 而不是 CreateNew

您不能在代码中设置 OnCreate 事件处理程序,因为表单已经创建。

如果有充分的理由不使用 dfm 文件并在代码中执行所有操作,那么您可能需要添加构造函数。通过覆盖虚拟构造函数来做到这一点:

constructor Create(AOwner: TComponent); override;

最后,问题中的大部分代码看起来都可疑,我看到了吗?全局变量的奇怪使用。奇怪的命名。从 class 之外设置重要事件,例如 OnClose。针对 nil 进行测试表明设计薄弱。我认为前面有问题。