我的应用程序完成初始化并创建主窗体后,我便具有要执行的功能。我确实在表单OnShow事件中有代码(称为ProcedureX),但是我刚刚注意到它被调用了两次,因为OnShow触发了两次。当主程序DPR调用时触发:

Application.CreateForm(TMainForm, MainForm) ;


正如我所期望的。但是之后,当我从包含屏幕上的表格位置的INI文件中读取内容时,我会打个电话:

MainForm.position := poScreenCenter ;


这样,它将再次触发OnShow事件。

我在哪里可以调用ProcedureX,它只能被调用一次,并且需要先创建主窗体才能执行它。

最佳答案

首次调用该过程时,可以测试并设置标志。像这样:

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
  private
    FRunOnce: Boolean;
  public
    [...]

[...]

procedure TForm1.FormShow(Sender: TObject);
begin
  if not FRunOnce then begin
    FRunOnce := True;
    ProcedureX;
  end;
end;

07-24 16:21