如何防止孩子多次创建,例如:登录表单。在登录表单被打开之前是否有一个解决方案而不循环孩子,并检查是否创建了另一个实例。
问问题
1226 次
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 回答