首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过变量TObject引用事件对象

通过变量TObject引用事件对象
EN

Stack Overflow用户
提问于 2012-11-28 08:36:48
回答 1查看 608关注 0票数 0

我有带有函数getsomedata的组件(键:string;listener:Tlistener)

哪个侦听器声明为like事件,如下所示:

代码语言:javascript
运行
复制
Tlistener = procedure (name,age,sex:string) of object ;

但是在我的组件侦听器管理器中,当我添加新的监听器时,监听器参数会像TObject类一样。

代码语言:javascript
运行
复制
ListenerManager.addListener(key:string;Listener:TObject);

当我简化代码时,我会收到错误消息。

实际参数不足

因为事件对象(TListener)和ListenerManager参数(TObject)。

全功能代码示例。

代码语言:javascript
运行
复制
procedure getsomedata (key:string;listener:Tlistener) ; 
begin

ListenerManager.addListener(key,listener); //error Here >>> addListener input parameters (key:string;Listener:TObject);

end;

我该怎么解决呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-28 09:14:13

在此代码中:

代码语言:javascript
运行
复制
procedure getsomedata (key:string;listener:Tlistener) ; 
begin
  ListenerManager.addListener(key,listener);
end;

您正在尝试将TListener类型的变量传递给addListener的第二个参数。该参数被键入为TObject

现在,TListener被键入为

代码语言:javascript
运行
复制
procedure(name,age,sex:string) of object;

过程类型的变量不能传递给类型为TObject的参数。

很难确切知道正确的代码会是什么样子,因为这个问题没有包含足够的背景信息。也许addListener应该接收一个TListener而不是TObject。但那只是猜测。如果您想要更完整的建议,那么您将需要在问题中添加足够的细节。

你在评论中说:

我无法将参数类型TObject更改为TListener

那样的话你就被卡住了。将TListener转换为TObject是不可能的。现在,您可以实现一个具有TListener类型的单个字段的类,并传递该字段。但我很怀疑这真的是正确的解决办法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13600920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档