如何在不创建对象的情况下侦听事件

时间:2014-02-18 20:21:39

标签: delphi oop events delphi-xe

我遇到了一个问题,我无法在Delphi中找到解决问题的方法。

我有一个弹出式菜单,我有一个事件,当人选择此选项时,我想要做的是为任何注册到它的对象广播此事件。

我面临的问题是,如果我创建了弹出菜单的实例,我可以只注册到该事件,但是如果我创建一个实例只是为了侦听这个事件仍然是一个不同的实例我听不到它。

如何归档这个目标,让很多对象在Delphi中监听一个对象的事件?

由于

1 个答案:

答案 0 :(得分:3)

Delphi本身不支持多播事件。你必须为此创建自己的机制。最简单的解决方案是将已注册的对象/处理程序存储在列表中,然后在触发事件时循环遍历该列表,并根据需要调用每个对象/处理程序。例如:

Simulating multicast events in Win32 Delphi

Allen Bauer撰写了一系列关于在Delphi中实现多播事件的更高级方法的博客文章:

Multicast events using generics
Multicast Events - the cleanup
Multicast Events - the finale

Getting Allen Bauer's TMulticastEvent<T> working

相关问题