我需要循环遍历组件并分配一个事件处理程序(例如为所有 TButton 动态分配 OnClick 事件
ShowMessage('You clicked on ' + (Sender as TButton).Name);
问题是在某些情况下我已经分配了 TButton OnClick 事件。
有办法解决这个问题吗?
假设我有 Button1,其硬编码的 onclick 事件处理程序是:
ShowMessage('This is Button1');
“解析”之后,我希望 Button1 的完整事件处理程序变为:
ShowMessage('This is Button1'); // design time event handler code
ShowMessage('You clicked on ' + (Sender as TButton).Name); // runtime added
注意:我正在寻找一种解决方案,允许我按原样使用 TButton 而无需继承它。
最佳答案
您可以在覆盖之前查找 OnClick 的分配,保留它并在新处理程序中使用它 - 基本上链接事件。
类似这样的事情:
var original : TNotifyEvent;
original := Component.OnClick;
Component.OnClick := NewMethod;
然后在你的 NewMethod 中:
if assigned(original) then original(Sender);
您可能不需要单个原始变量,而是保存在组件上键入的集合。
关于Delphi:如何动态分配事件处理程序而不覆盖现有的事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4501623/