我有一个可视化组件,它需要检测集合项何时被删除,以便它可以重新绘制。
TCollection有以下受保护的过程:
procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); virtual;不幸的是,它只在添加项时才被调用,而只是在之前被删除。我需要知道一个项目何时被删除了,。
在内部,TCollection使用一个TList,该TList还提供一个通知过程。TList版本确实包含一个已删除的通知。不幸的是,TList是一个私有成员。
如何检测TCollection项何时已被删除?
发布于 2012-12-21 20:42:58
TCollection.Notify()是正确的方法。简单地说,不要立即重新绘制,而是Invalidate()组件。当下一次重新绘制被实际触发时,删除的项将消失。
发布于 2012-12-21 16:20:22
重写集合项的SetCollection方法。实现如下所示:
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方法。
https://stackoverflow.com/questions/13992645
复制相似问题