摘自:http://blog.csdn.net/gogogo/archive/2006/10/09/1327911.aspx
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文档中也没有提示这些数据需要释放。
其实这个问题容易被大家忽略,解决办法还是有的,而且也不难,这里就要使用到ListView或者TreeView的OnDeletion事件,Delphi中关于OnDeletion的说明如下:
Occurs when an item in the list view is about to be deleted.
Delphi syntax:
property OnDeletion: TLVDeletedEvent;
C++ syntax:
__property TLVDeletedEvent OnDeletion = {read=FOnDeletion, write=FOnDeletion};
Description
Write an OnDeletion event handler to respond when an item in the list is about to be deleted. The Item parameter is the TListItem object from the Items property that is about to be deleted.
也就是说当需要删除项目时会触发这个事件,在VCL Source 中也可以看到调用过程,其实解决方法就是在这个事件中加入一个语句就可以了,并且是不可以缺少的语句,代码如下:
procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem);
begin
Dispose(Item.Data);
end;
这样就可以安全的释放掉Data的内存了。
分享到:
相关推荐
在GUI中能够做成想资源管理器一样的界面,,可以学会Listview和Treeview的使用方法
博文链接:https://kenter1643.iteye.com/blog/180648
在delphi中使用listview控件,启用checkbox选项后,默认是多选,此示例实现单选功能,在Delphi7下测试通过。
C# Treeview listview
DELPHI xe5 ListView例子,最简单的例子
delphi实现两个listview之间的item拖拽的源码
VB6.0演示Treeview和ListView相结合的例子,在ListView中使用Treeview菜单,将ListView修饰了一下,好像看上去不太像ListView了,但在其中增加了树控视图,实际项目编写中,这种类似的功能还是使用率很高的。
listview和treeview交互实现
Delphi ListView基本用法大全:这里列举了一些delphi listview的用法代码,有详细的注释说明,代码直接可以复制自己的程序中稍加修改就可以使用了。
本程序为Delphi中的ListView列表定制箭头及表头布局,可以让表头的文字靠左或者靠或显示,为表头增加一个箭头指示,老生长谈的问题,有喜欢的可拿去,纯Delphi代码实现,可以直接在D7编译,运行效果如上。
delphi ex10 ListView上拉下拉更新
很好用的一个列表控件,可以用来代替Delphi自带的ListView和TreeView,而且也一直在更新,目前已经支持最新的XE2
delphi中ListView控件的点击排序样例,delphi中ListView控件的点击排序样例
TreeView和ListView的使用
谷歌的sdk中item的背景颜色默认是黄色的,通过自定义我们可以改变item的背景颜色
delphi 如何在ListView控件中绘底图
学习C#的好例子,主要是ListView TreeView两个控件
Treeview和ListView使用 这个都是本人收藏了3年的资源 现放出 都是总结了很多系统 软件项目实施过程中的经验的 慢慢积累的
Delphi 实现文字透明外观圆角的ListView数据列表
C语言操作ListView和TreeView,有详细的例子说明,这是资料文档,放在这里备份