代码之家  ›  专栏  ›  技术社区  ›  Ouerghi Yassine

如何防止在MDI中创建多个子项

  •  -1
  • Ouerghi Yassine  · 技术社区  · 11 年前

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

    1 回复  |  直到 11 年前
        1
  •  1
  •   Remy Lebeau    11 年前

    默认情况下,每个Form都声明了一个全局指针。即使您没有自动创建表单,您仍然可以使用该指针。对于任何给定的Form,将其全局指针初始化为 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;