Delphi - 在现有表格上分配表格 OnClose
Delphi - Assign Form OnClose on an existent one
我的项目中有许多使用 Form OnClose 事件的 Forms。
但是,我需要在运行时的所有表单上添加另一个 "generic" OnClose。
有没有办法只添加新的事件方法,而不是替换它?因此,表单将触发两个 OnClose 事件。
一次只能为一个事件分配一个处理程序。
您可以将 "generic" 处理程序分配给每个表单的 OnClose
事件,然后让每个表单覆盖其虚拟 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
我的项目中有许多使用 Form OnClose 事件的 Forms。 但是,我需要在运行时的所有表单上添加另一个 "generic" OnClose。 有没有办法只添加新的事件方法,而不是替换它?因此,表单将触发两个 OnClose 事件。
一次只能为一个事件分配一个处理程序。
您可以将 "generic" 处理程序分配给每个表单的 OnClose
事件,然后让每个表单覆盖其虚拟 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