我很难让 Delphi 2006 将事件处理程序分配给 TFrame 上独立的组件。
假设我有一个TComboFrame
包含 TCombo 的框架,Combo1
我在主窗体的几个地方使用它。
当我将 TComboFrame 的实例放置MyFrame1
到我的主窗体上,并且我想为组合分配一个事件处理程序时,我通过单击MyFrame1
放置在窗体上的框架内的 TCombo 并双击空白
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 然后创建一个具有唯一名称的空处理程序。