gpt4 book ai didi

Delphi:如何动态分配事件处理程序而不覆盖现有的事件处理程序?

转载 作者:行者123 更新时间:2023-12-03 14:39:57 25 4
gpt4 key购买 nike

我需要循环遍历组件并分配一个事件处理程序(例如为所有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com