首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测TCollection何时在设计时被删除?

如何检测TCollection何时在设计时被删除?
EN

Stack Overflow用户
提问于 2012-12-21 15:19:13
回答 2查看 364关注 0票数 1

我有一个可视化组件,它需要检测集合项何时被删除,以便它可以重新绘制。

TCollection有以下受保护的过程:

代码语言:javascript
复制
procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); virtual;

不幸的是,它只在添加项时才被调用,而只是在之前被删除。我需要知道一个项目何时被删除了,

在内部,TCollection使用一个TList,该TList还提供一个通知过程。TList版本确实包含一个已删除的通知。不幸的是,TList是一个私有成员。

如何检测TCollection项何时已被删除?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-21 20:42:58

TCollection.Notify()是正确的方法。简单地说,不要立即重新绘制,而是Invalidate()组件。当下一次重新绘制被实际触发时,删除的项将消失。

票数 4
EN

Stack Overflow用户

发布于 2012-12-21 16:20:22

重写集合项的SetCollection方法。实现如下所示:

代码语言:javascript
复制
procedure TFooCollectionItem.SetCollection(const Value: TCollection);
var
  OldCollection: TFooCollection;
begin
  OldCollection := Collection as TFooCollection;
  inherited;
  if (OldCollection <> Value) and Assigned(OldCollection) then
    OldCollection.NotifyItemReallyRemoved(Self);
end;

您可以自己提供并实现假设的NotifyItemReallyRemoved方法。

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

https://stackoverflow.com/questions/13992645

复制
相关文章

相似问题

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