导航
  • 主页
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

组件事件的通知!

编程小战 2003-03-01 03:34:59
设有:
TA=class(TComponent)
public
procedure DoActionA;

end;

TB=class(TComponent)
private
FA:TA
procedure ResponseForDoActionA;
published
property A:TA read FA write FA;

end;

在TB中有一个ResponseForDoActionA方法,它是在TB.A指向一个TA的实例时对TA.DoActionA方法的调用的响应。但是TA怎样将该事件通知给TB呢?TB如何用ResponseForDoActionA来响应来自TA的事件呢?

高手!帮帮忙!
...全文
6 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
halfdream 2003-03-03
因为A同B是一对多关系,则A中需要维护多个B信息。

每个B指向A的时候,A中就在一个LIST中相应维护一个B(或者B相应的事件方法)的引用,
当A中事件触发时,A就通过LIST中的信息通知一个个B。。

做法。
方法1,在A的LIST中维护B的对象。因为在VCL中,TOBJECT继承下的来所有对象都支持消息,
A可以通过自定义一个消息触发B中事件。
方法2,在A的LIST中只维护B的事件函数指针。
方法3, 在A的LIST中维护B的事件接口,
回复
编程小战 2003-03-02
上面的方法不行,我是要TA.DoActionA时,任何将TB.A指向TA的TB的实例都能自动凋用TB.ResponseForDoActionA,也就是说,只要TB的实例将属性A指向了TA的实例,那么该TA的实例一旦执行了DoActioanA方法,那么相应的TB的实例就会以ResponseForDoActionA方法对其进行响应!在这里,TA是主动的,TB是被动的!是因为TA.DoActioanA的执行导致了属性指向TA的TB的ResponseForDoActionA方法的执行,TB是不能主动调用ResponseForDoActionA方法的!
回复
Linux2001 2003-03-02
Dispose
回复
京霾 2003-03-01
procedure setA(value:TA);
没有(var).
回复
京霾 2003-03-01
TA=class(TComponent)
public
procedure DoActionA;

end;

TB=class(TComponent)
private
FA:TA
procedure ResponseForDoActionA;
procedure setA(var value:TA);
published
property A:TA read FA write setA;

end;
这样可以在SetA中执行TA.DoActionA,并激活响应方法ResponseForDoActionA.
回复
fancier 2003-03-01
关注!
回复
发动态
发帖子
Delphi
创建于2007-08-02

4802

社区成员

Delphi 开发及应用
申请成为版主
社区公告
暂无公告