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

时间:2012-12-21 15:19:13

标签: delphi list delphi-xe

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

TCollection具有以下受保护程序:

procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); virtual;

不幸的是,只有在添加项目时才会调用它,只有才能删除它。我需要知道项目何时被删除

在内部,TCollection使用TList,它也提供Notify过程。 TList版 包含已删除的通知。不幸的是,TList是私人会员。

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

2 个答案:

答案 0 :(得分:4)

TCollection.Notify()是正确的方法。只需不要立即重新绘制,而是Invalidate()组件。当实际触发下一个重绘时,删除的项目将消失。

答案 1 :(得分:3)

覆盖集合项的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方法。