FormClose继承

时间:2017-06-17 01:21:40

标签: delphi inheritance delphi-10.1-berlin

我对Delphi很新(我使用的是版本10.1 Berlin),我正在尝试理解继承是如何工作的。

假设我有2个表单在关闭时必须执行相同的操作。为了避免代码重复,我最初的想法是创建一个继承自TFoobarForm的超类TForm,然后像这样创建一个过程FormClose

procedure TFoobarForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  { Some code }
end;

之后,我想创建两个表单,比如TFooFormTBarForm,它们继承自TFoobarForm。但我不知道是否有办法让这些新表单执行超类FormClose操作,而无需从每个继承它的类中手动调用该过程。

最后,我正在寻找的是一种避免写这个的方法:

procedure TFooForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited FormClose(Sender, Action);
end;

代表TFoobarForm的每个子类。

1 个答案:

答案 0 :(得分:5)

让基类覆盖虚拟DoClose()方法:

type
  TFoobarForm = class(TForm)
  protected
    procedure DoClose(var Action: TCloseAction); override;
  end;

procedure TFoobarForm.DoClose(var Action: TCloseAction);
begin
  { Some code }
  // call inherited to trigger the OnClose event, if it is assigned...
end;

然后您根本不需要在派生类中分配OnClose事件处理程序(除非他们真的想要以与基类不同的方式处理事件)。