Form关闭继承

问题描述 投票:0回答:1

我对 Delphi 编程很陌生(我使用的是 Delphi 10.1 Berlin 版本),我正在尝试了解继承的工作原理。

假设我有两个表单,它们在关闭时必须执行相同的操作。为了避免代码重复,我最初的想法是创建一个超类

TFoobarForm
,它继承自
TForm
,然后创建一个过程
FormClose
,如下所示:

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

之后,我想创建两种形式,比如说

TFooForm
TBarForm
,它们继承自
TFoobarForm
。但我不知道是否有办法让这些新表单执行超类
FormClose
操作,而不必从继承它的每个类中手动调用该过程。

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

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

对于

TFoobarForm
的每个子类。

delphi inheritance delphi-10.1-berlin
1个回答
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
事件处理程序(除非它们确实想以与基类不同的方式处理事件)。

© www.soinside.com 2019 - 2024. All rights reserved.