Delphi 如何防止在MDI中创建多个子项
如何防止孩子多次创作, 例:一个登录表单。Delphi 如何防止在MDI中创建多个子项,delphi,mdi,Delphi,Mdi,如何防止孩子多次创作, 例:一个登录表单。 在打开登录表单之前,是否有一个不在child上循环的解决方案,并检查是否创建了它的另一个实例。默认情况下,每个表单都声明了一个全局指针。即使不自动创建表单,也可以使用该指针。对于任何给定表单,在启动时将其全局指针初始化为nil,在创建该表单的新实例之前检查指针是否为nil,关闭表单时销毁表单,并在销毁表单时将其全局指针重置为nil。例如: unit LoginForm; interface ... type TLoginForm = clas
在打开登录表单之前,是否有一个不在child上循环的解决方案,并检查是否创建了它的另一个实例。默认情况下,每个表单都声明了一个全局指针。即使不自动创建表单,也可以使用该指针。对于任何给定表单,在启动时将其全局指针初始化为
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.
表单不是偶然创建的。你创造它们。因此,您可以选择不这样做。是的,我想知道如何防止用户这样做。。也许有一种“多种形式”的选择,或者是你给了他们创造形式的能力。创建它们的是您的代码。我如何才能赋予它们一次只打开一个表单的权限?
TForm
有一个MDIChildCount
属性,除非您只对特定类型的子表单感兴趣,否则您不必手动通知表单。
procedure TMainForm.SomeProcedure;
begin
...
if not Assigned(LoginForm) then
LoginForm := TLoginForm.Create(Self);
LoginForm.Show;
...
end;