Delphi中大家在使用 ListView和TreeView时,一般都会使用到Item的Data属性来保存大家自己的内部数据,这个Data的声明如下:
大家可以看到它就是一个指针,使用上一般类似如下代码(以ListView为)
PViewItemState = ^TViewItemState;
TViewItemState = record
ViewItemId: integer;
end;
其实这个问题容易被大家忽略,解决办法还是有的,而且也不难,这里就要使用到ListView或者TreeView的OnDeletion事件,Delphi中关于OnDeletion的说明如下:
Occurs when an item in the list view is about to be deleted.
property OnDeletion: TLVDeletedEvent;
__property TLVDeletedEvent OnDeletion = {read=FOnDeletion, write=FOnDeletion};
也就是说当需要删除项目时会触发这个事件,在VCL Source 中也可以看到调用过程,其实解决方法就是在这个事件中加入一个语句就可以了,并且是不可以缺少的语句,代码如下:
procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem);
begin
Dispose(Item.Data);
end;