Delphi 如何在设计时检测是否删除了TCollection?

Delphi 如何在设计时检测是否删除了TCollection?,delphi,list,delphi-xe,Delphi,List,Delphi Xe,我有一个可视化组件,需要检测何时删除了一个集合项,以便它可以重新绘制 t收集具有以下受保护的过程: procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); virtual; 不幸的是,它仅在添加项时和删除项之前被调用。我需要知道某个项目何时被删除 在内部,TCollection使用一个TList,它还提供一个Notify过程。TList版本不包含已删除的通知。不幸的是,TList是一个私人成员 如何检测

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

t收集具有以下受保护的过程:

procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); virtual;
不幸的是,它仅在添加项时和删除项之前被调用。我需要知道某个项目何时被删除

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


如何检测t收集项目何时被删除?

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

重写集合项的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方法。

t collection.Notify是正确的方法。只是不要立即重新绘制,而是使组件无效。下次重新绘制实际触发时,删除的项目将消失。

t正确的方式是collection.Notify。只是不要立即重新绘制,而是使组件无效。在实际触发下一次重新绘制时,删除的项目将消失。

您是否可以在删除前事件中为自己发送消息以触发重新绘制?重写集合更新方法可能会执行此操作?您是否可以在删除前事件中为自己发送消息以触发重新绘制?重写集合更新方法可能会执行此操作?tooThanks Rob-工作正常:它可能有用,但不是正确答案。使用TCollection.Notify是正确的答案。谢谢Rob-工作得很好:它可能会工作,但不是正确的答案。使用TCollection.Notify是正确答案。