摘自: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的内存了。
分享到:
相关推荐
`TTreeList`组件是Delphi VCL(Visual Component Library)框架中一个独特且强大的控件,它结合了`ListView`和`TreeView`的功能,允许用户在多列树形结构中展示数据。这篇博客文章深入探讨了这个组件的用法,提供了...
2. ListView显示文件内容:当选中TreeView中的某个文件夹节点时,ListView会更新为显示该文件夹下的所有文件和子文件夹,用户可以查看文件名、大小、修改日期等信息。 要实现这样的功能,首先需要在GUI设计工具中...
3. 监听事件:当用户在TreeView中选择一个节点时,需要捕获SelectionChanged或AfterSelect等事件,然后更新ListView,显示该节点对应的详细信息。 4. 交互同步:确保ListView和TreeView之间的操作同步,比如在...
在C#编程中,`TreeView`和`ListView`控件是Windows Forms开发中常见的两种界面元素,它们分别用于展示层次结构的数据和多列列表数据。本篇将详细讲解这两个控件的基本概念、如何结合使用以及在实际应用中的案例。 #...
可以通过`ListView1.Items.Add`方法添加新项,并使用`Item.Caption`和`Item.SubItems`属性设置项的文本。例如: ```delphi procedure TForm1.FormCreate(Sender: TObject); begin ListView1.Items.Add.Caption := ...
通过这个简单的DELPHI xe5 ListView例子,开发者可以了解如何在移动应用中使用ListView来展示和管理数据。随着对TListView组件的深入了解,你可以创建更加复杂和功能丰富的应用程序,满足用户在iOS等平台上的需求。...
在Windows应用程序开发中,ListView和TreeView是两种常用的控件,它们用于展示数据并提供用户交互。ListView常用于显示多列、多行的数据列表,而TreeView则用于构建层级结构的导航。本篇将深入探讨如何在C#或VB.NET...
在Delphi编程环境中,ListView控件是一个非常常用且功能丰富的组件,它允许开发者展示一系列的项,每项可以包含文本、图像甚至自定义视图。本文将深入探讨如何在ListView中实现图标拖动功能,这对于创建具有用户交互...
通过以上步骤,你可以在Delphi中实现两个ListView之间的Item拖放功能。在实际应用中,可能还需要根据具体需求调整细节,例如检查拖放合法性、更新数据绑定等。这个过程涉及了Windows消息处理、自定义事件和接口编程...
默认情况下,ListView的每个Item(列表项)背景色可能并不符合所有开发者的设计需求。谷歌SDK提供的默认样式中,Item的背景颜色可能是黄色,但这可以通过自定义来改变,以满足个性化设计或品牌风格的要求。在本篇...
在Delphi编程环境中,ListView控件是用于展示数据的常用组件,它允许用户以列表或表格的形式查看和操作数据。本篇文章将详细讲解如何在ListView中执行行和列的写操作,以及如何利用for循环处理大量数据。 首先,...
通过事件处理程序,比如TreeNode的AfterSelect事件和ListView的ItemSelectionChanged事件,我们可以实现这些控件间的联动,确保当用户在TreeView中选择一个节点时,ListView会相应地更新其显示内容。 实现这样的...
此外,提供的"delphi_如何在ListView控件中绘底图.doc"文档可能包含更详细的信息和代码示例,建议阅读以获取深入理解。"下载说明.txt"和"A5下载- 更全的站长资源平台.url"可能是关于文档下载和更多资源的指引,你...
在Delphi编程环境中,ListView控件是一个非常常用且强大的组件,尤其在数据展示和用户交互方面。本示例聚焦于Delphi XE10.2中的ListView控件,该版本提供了许多增强的功能和优化,使得开发者能够更好地利用这个组件...
在Delphi中,ListView控件是经常用于展示数据列表的组件。它提供了多种视图模式,包括报告视图,其中可以包含复选框(Checkbox)来实现用户交互。本示例着重讲解如何在ListView中实现复选框的单选功能。 在Delphi中...
综上所述,"delphi ex10 ListView上拉下拉更新"这个示例涵盖了Delphi Android应用中`TListView`的高级使用技巧,包括自定义事件处理和利用平台服务来实现上拉加载更多和下拉刷新功能。这些技术对于创建交互性强、...
本篇文章将深入探讨如何在C语言中使用ListView和TreeView,并通过具体的例子进行详细说明。 首先,ListView控件主要用于显示列表形式的数据,可以包含单列或多列,每列可以有不同的数据类型,如文本、图标等。操作...
在Tutorial 3中,作者介绍了如何使用listview和treeview控件来开发一个图像浏览器。该浏览器可以显示图像的缩略图、名称和大小等信息,并可以实现图像的浏览、选择和删除等操作。 在开发图像浏览器时,作者首先介绍...
通过研究这些源代码,你可以深入理解ListView的工作原理,以及如何有效地在实际项目中使用它。 总之,Delphi 12 FMXUI的ListView是一个强大且灵活的组件,它集成了数据绑定、视图定制、用户交互等多种功能,是构建...