-1

如何防止孩子多次创建,例如:登录表单。在登录表单被打开之前是否有一个解决方案而不循环孩子,并检查是否创建了另一个实例。

4

1 回答 1

1

默认情况下,每个 Form 都声明了一个全局指针。即使您不自动创建表单,您仍然可以使用该指针。对于任何给定表单,nil在启动时初始化其全局指针,在创建该表单的新实例之前检查指针,nil在表单关闭时销毁表单,并将其全局指针重置回nil表单被销毁时。例如:

unit LoginForm;

interface

...

type
  TLoginForm = class(TForm)
    ...
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
    ...
  end;

var
  LoginForm: TLoginForm = nil; // <-- here

implementation

...

procedure TLoginForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TLoginForm.FormDestroy(Sender: TObject);
begin
  LoginForm := nil;
end;

...

end.

procedure TMainForm.SomeProcedure;
begin
  ...
  if not Assigned(LoginForm) then
    LoginForm := TLoginForm.Create(Self);
  LoginForm.Show;
  ...
end;
于 2013-10-24T19:23:21.673 回答