【发布时间】:2012-04-19 17:42:36
【问题描述】:
我很难让 Delphi 2006 将事件处理程序分配给 TFrame 上独立的组件。
假设我有一个框架 TComboFrame,其中包含一个 TCombo Combo1,我在主窗体的多个位置使用它。
当我将 TComboFrame MyFrame1 的实例放到我的主窗体上时,我想分配一个
组合的事件处理程序,我通过单击里面的 TCombo 来完成
我放在表单上的框架MyFrame1,然后双击空白
OnChange 对象检查器事件选项卡中的字段。
通常会创建一个名称如下的新处理程序:
procedure TMainForm.MyFrame1Combo1Change(Sender: TObject);
并且事件处理程序名称源自祖先 TComboFrame (Combo1) 上的组件名称和我放置在表单上的实例名称 (MyFrame1) - 即对于该实例是唯一的TComboFrame。那我可以
对我放置在主框架上的其他框架实例执行此操作
表单,它们每个都有自己的事件处理程序。
如果我想要一个为框架的所有实例触发的事件处理程序, 我会打开祖先框架本身并在那里做。
这是我对它应该如何工作的理解,但有些东西 哪里出错了。在我的主要框架的几个实例中 表单,有的有自己的事件处理器,有的有共同的事件处理器,
procedure TDMainForm.ComboFrame1Combo1Change(Sender: TObject);
我尝试过的任何方法都没有破坏 Delphi 似乎拥有的这个幻像链接 这个由多个框架共享的公共事件处理程序。
我该如何修复这种状态,首先是什么原因造成的?
** 更新 1 **
在阅读回复和一些实验后,我发现我可以通过以下过程修复有问题的组件:
1) 删除框架的所有事件处理程序。
2) 删除框架,记住它的名字。
3) 复制另一个已知正常的事件(即拥有自己的“个人”事件名称)。
4) 将那个粘贴到您删除的那个位置。
5) 恢复原名。
6) 创建您的事件处理程序。
...至少,它至少对我有用一次...
** 更新 2 **
另一种解决方法似乎是在对象检查器中双击空事件字段时改写它创建的事件处理程序名称,并使用一个新的唯一名称,然后再次双击该名称。 Delphi 然后创建一个具有唯一名称的空处理程序。
【问题讨论】:
标签: delphi event-handling delphi-2006 tframe