加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – TFrame中的EventHandler?

发布时间:2020-12-15 09:41:13 所属栏目:大数据 来源:网络整理
导读:我有一个TForm(TVehicleEditForm)里面有3个相同的TFrame(TVehicleUnitFrame). 这个想法是框架的每个实例都通过框架内的事件处理程序处理自己的事件.问题是没有调用eventhandler. 我试图通过覆盖Create方法通过框架内的代码分配eventhandler,但在这种情况下也
我有一个TForm(TVehicleEditForm)里面有3个相同的TFrame(TVehicleUnitFrame).

这个想法是框架的每个实例都通过框架内的事件处理程序处理自己的事件.问题是没有调用eventhandler.

我试图通过覆盖Create方法通过框架内的代码分配eventhandler,但在这种情况下也不会调用处理程序.

但是,如果我从表单中将framehandler分配到框架之外,它可以正常工作.
像这样:

fraVehicleUnitFrame1.cmdNewOwner.OnClick := fraVehicleUnitFrame1.cmdNewOwnerClick;
fraVehicleUnitFrame2.cmdNewOwner.OnClick := fraVehicleUnitFrame2.cmdNewOwnerClick;
fraVehicleUnitFrame3.cmdNewOwner.OnClick := fraVehicleUnitFrame3.cmdNewOwnerClick;

这只适用于一个按钮!
由于我在框架内有许多组件,这将导致许多任务……
如果应该直接在对象检查器中完成这个相当难看的代码.

我正在使用D2007.对原因有什么看法?

关心罗兰

解决方法

当你从代码中执行它时,它的工作原理是你将指针替换为事件处理程序,无论以前是什么.

在设计时,我有两个可能的地方来设置处理程序.假设我在Unit1中有Frame1并将其放在MyUnit中的MyForm上,我将有机会在两个地方设置事件处理程序.

在您的情况下,您希望在帧本身中设置事件处理程序(在我的示例中为Unit1),因为它引用的代码在帧本身上.如果你这样做,它应该工作.如果在使用它的位置(MyUnit)上设置事件处理程序,那么将在那里分配事件处理程序.

只要在您在表单中添加事件处理程序之前分配了该事件处理程序,Delphi就足够聪明,仍然可以从您的帧中调用事件处理程序.如果您首先将其添加到窗体上,然后在框架上添加处理程序,则不会调用框架上的最后一个.
更糟糕的是,如果你删除表单中的处理程序,它仍然不会调用框架上的处理程序.

你需要做的是:

右键单击表单,然后选择“以文本形式查看”.向下滚动到框架.它应该是这样的:

inline FrameX: fraVehicleUnitFrame1

在那之下,寻找

inherited cmdNewOwner: TButton

你应该看到类似的东西:

OnClick = FormOldClickHandler

也许

OnClick = nil

删除此OnClick分配,再次以表单形式查看并保存.一切都应该好.如果现在选择窗体上的按钮(或任何cmdNewOwner),则对象检查器应该在该事件旁边不显示任何内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读