Delphi中大家在使用 ListView和TreeView时,一般都会使用到Item的Data属性来保存大家自己的内部数据,这个Data的声明如下:
property Data: Pointer;
大家可以看到它就是一个指针,使用上一般类似如下代码(以ListView为)
添加时
PViewItemState = ^TViewItemState;
TViewItemState = record
ViewItemId: integer;
end;
var
nLoop: integer;
li: TListItem;
pp: PViewItemState;
begin
for nLoop := 0 to 10 do
begin
li := ListView1.Items.Add;
li.Caption := IntToStr(nLoop);
new(pp);
pp^.ViewItemId := nLoop;
li.Data := pp;
end;
end;
删除相应的项时多数采用
ListView1.DeleteSelected; 或
ListView1.Clear;
就结束了操作。
但是这里存在非常大的危险,就是我们的自己分配的Data内容有没有释放,Delphi文档中也没有关于这个问题的说明,所以我做了一个测试,发现Delphi是不自动释放这些数据的,这些未释放的数据在一个包含较多修改的ListView或者TreeView中将非常危险,如果是长期运行的系统将更危险,Delphi文档中也没有提示这些数据需要释