Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何防止在MDI中创建多个子项_Delphi_Mdi - Fatal编程技术网

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;