组件事件的通知!

螃蟹就是横着走 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的事件呢?

高手!帮帮忙!
...全文
57 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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的事件接口,
  • 打赏
  • 举报
回复
上面的方法不行,我是要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
  • 打赏
  • 举报
回复
关注!

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧