我的项目上有许多使用Form OnClose事件的窗体。
但是,我需要在运行时的所有窗体上添加另一个“通用” OnClose。
有什么方法可以添加新的事件方法,而不是替换它?因此,该窗体将触发两个OnClose事件。

最佳答案

一次只能将一个处理程序分配给一个事件。

您可以做的是为每个Form的OnClose事件分配“通用”处理程序,然后让每个Form覆盖其虚拟的DoClose()事件以执行其本地工作。准备调用通用处理程序时,它可以调用继承的DoClose()方法。例如:

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

procedure TMyForm.DoClose(var Action: TCloseAction);
begin
  // do something here...
  inherited; // <-- call OnClose handler
end;


另一种方法是为实际的事件处理程序实现多播委托,然后该委托可以根据需要调用其他处理程序。以下是有关该主题的一些博客:

Multicast events using generics

MultiCast Events - Part 1
MultiCast Events - Part 2
MultiCast Events - Conclusion

或者,您可以完全忽略OnClose事件,而改为实现观察者模式(使用DoClose()调用观察者)。以下是有关该主题的一些博客:

Observer Design Pattern in Delphi

Delphi and the Observer Pattern

The Observer Pattern

关于delphi - Delphi-在一个现有的表单上分配OnClose表单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37866349/

10-12 06:10