delphi TListView
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi TListView相关的知识,希望对你有一定的参考价值。
我选中第一TListView中的的行 不会报错,第二次在选中的话就提示下面这个!哪位朋友能告诉我下为什么?? 代码如下:procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);var i:integer;begin inherited; for i:=0 to ListView1.Selected.Index do begin Label1.Caption:= ListView1.Items[ListView1.Selected.Index].Caption; Label2.Caption:= ListView1.Items[ListView1.Selected.Index].SubItems.Strings[0]; Label3.Caption:= ListView1.Items[ListView1.Selected.Index].SubItems.Strings[1]; end;end;
//你注意ListView1.Selected本身就是你选择的Item对象实例, 没记错的话当你点击了ListView的时候却没有选择任何项,这时候这里返回的是一个控对象(nil),在这种情况下for i:=0 to ListView1.Selected.Index do当然会出错
按照这样改试试:(我不方便测试你自己照着这个方式改)
with ListView1 do
begin
if Selected <> nil then
begin
Label1.Caption:= Selected.Caption;
Label2.Caption:= Selected.SubItems.Strings[0];
Label3.Caption:= Selected.SubItems.Strings[1];
end;
end;
你那个循环从你发出的代码上来看是没有意义的并且影响效率上面的我给你去掉了 参考技术A 你这个程序莫名其妙么。既然后面显示的是 Label1.Caption:= ListView1.Items[ListView1.Selected.Index].Caption,那么变量就是ListView1.Selected.Index,和上面的for有什么关系。和i又有什么关系?你这个循环就是多余的。还有,你的报错的消息是什么也不截图来看看,怎么能准确知道到底是什么原因报错的呢。
Delphi(TListView)列表视图组件详解
Delphi(TListView)列表视图组件详解
TListView 组件以多种形式显示列表的项目,如详细资料、小图标、大图标等形式表示列表中的项目。列表视图与用TListBox 组件实现的列表框非常相似。不同的是,列表视图可以让用户选择不同的显示方式,诸如大图标方式、小图标方式、简单列表方式和详细列表方式等。Windows XP 的资源管理器就是一个典型的列表视图。
一.TListView 组件的典型用法
列表视图的显示方式是通过ViewStyle 属性设置的。当ViewStyle 属性设为vsReport 时,列表视图将以详细列表的方式显示。以Windows XP 的资源管理器为例,当选中“查看”菜单上的“详细资料”命令时,列表视图中将显示文件或文件夹的图标、名称、字节数、类型和上次修改时间等信息。以详细列表方式显示时,需要把Columns 属性设为需要的栏数,如果要给每一栏显示一个表头,必须把ShowColumnHeaders 属性设为True。如果把ColumnClick 属性设为True,每一栏的表头就相当于一个按钮,单击这些按钮将触发OnColumnClick 事件。单击“名称”这一栏表头,目录中的文件将按文件名的字母进行排序。单击“大小”这个按钮,目录中的文件将以文件的字节数进行排序。
程序应当为列表视图中的每一项指定图标。因此需要建立两个图像列表,一个用于大图标显示方式,另一个用于小图标显示方式(因为这两种方式下的图标大小是不同的),然后分别设置LargeImages属性和SmallImages 属性指定这两个图像列表。
二.TListView 组件的重要属性
·BoundingRect | 返回一个能把列表视图中所有项包住的矩形 |
·CheckBoxed | 列表视图中项的旁边将显示复选框 |
·Column | 此属性可以访问列表视图中的每一栏 |
·ColumnClick | 此属性设为True时,将触发OnColumnClick事件 |
·Columns | 列表视图的每一项将分成很多栏 |
·FlatScrollBars | 列表视图的滚动条是平坦的 |
·FullDrag | 允许用户拖动表头 |
·GridLines | 此属性将显示栅格线 |
·HideSelection | 当输入焦点移走时,原先选择的节点是否处于被选择状态 |
·HotTrack | 当鼠标指向某个项时,该项的外观将与众不同 |
·HoverTime | 此属性用于设置鼠标必须停留多久才能选择一个项,1000代表1秒 |
·ItemFocused | 指定或返回列表视图中具有输入焦点的项 |
·Items | 代表列表视图中的所有项 |
·LargeImages | 此属性用于指定大图标显示方式下大图标所在的图像列表 |
·MultiSelect | 如果此属性设为True,用户可以同时选择多个项 |
·ReadOnly | 列表视图是只读的 |
·RowSelect | 用户可以一次选择一整行 |
·SelCount | 返回列表视图中被选择的项的数目 |
·Selected | 此属性用于设置返回列表视图中被选择的项 |
·SmallImages | 指定小图标显示方式下小图标所在的图像列表 |
·ShowWorkAreas | 通过定义工作区,可以把图标分组 |
·SortType | 此属性用于设置什么情况下列表视图中的项将重新排序 |
·StateImages | 此属性用于指定一个图像列表 |
·TopItem | 返回列表视图中当前可见的最顶端的项 |
·ViewStyle | 设置列表视图的显示方式 |
(1)BoundingRect 属性
此属性返回一个能把列表视图中所有项包住的矩形。此属性仅在ViewStyle 属性设为vsIcon 或vsSmallIcon 时有效。(2)CheckBoxed 属性
当ViewStyle 属性设为vsList 或vsReport 时,如果把CheckBoxes 属性设为True,列表视图中项的旁边将显示复选框,如同TCheckListBox 组件一样。(3)Column 属性
此属性可以访问列表视图中每一栏,Index 指定栏的序号。此属性仅当ViewStyle 属性设为vsReport时有效。(4)ColumnClick 属性
如果此属性设为True,栏的表头(如果有的话)将同时作为按钮用,按下这些按钮,将触发OnColumnClick 事件,通常用于对列表视图中的项进行重新排序。(5)Columns 属性
如果ViewStyle 属性设为vsReport,列表视图的每一项将分成多栏,每一栏都是一个TListColumn对象,所有的栏构成TListColumn 对象。在设计期,可以单击Columns 属性旁的省略号“?”按钮打开“Editing Columns”窗口,然后建立和编辑栏的属性。
(6)HideSelection 属性
如果此属性设为True,当输入焦点从列表视图移到其他组件上时,原先选择的节点将不再处于被选择状态。如果此属性设为False,当输入焦点移走时仍然保持选择状态。(7)ItemFocused 属性
此属性指定或返回列表视图中具有输入焦点的项。一个列表视图中可以同时有多个项被选择,但只能有一个项具有输入焦点。(8)Items 属性
此属性代表列表视图中的所有项。列表视图中的每一项是一个TListItem 对象。在设计期,可以按下Items 属性旁的“...”按钮打开“ListView Items”编辑器,然后建立和编辑列表视图中的每一项.(9)MultiSelect 属性
如果此属性设为True,用户可以同时选择多个项。(10)RowSelect 属性
在ViewStyle 属性设为vsReport 的前提下,如果把此属性设为True,用户可以一次选择一整行。(11)Selected 属性
此属性用于设置返回列表视图中被选择的项。如果有多项被选择,返回的是当前有输入焦点的项。(12)ShowWorkAreas 属性
在ViewStyle 属性设为vsIcon 或vsSmallIcon 的情况下,通过定义工作区,可以把图标分组,如果ShowWorkAreas 属性设为True,列表视图将把客户区分成几个工作区,每个工作区的颜色由TWorkArea的Color 属性指定,标签由TWorkArea 的DisplayName 属性指定。(13)SortType 属性
此属性用于设置什么情况下列表视图中的项将重新排列。它设定了如下4 个用户可选值。- stNone:不重新排序。
- stData:项的Data 属性发生变化时重新排序。
- stText:项的Caption 属性发生变化时重新排序。
- stBoth:项的Data 属性或Caption 属性发生变化时重新排序。
(14)ViewStyle 属性
此属性用于设置什么情况下列表视图中的项将重新排列。它设定了如下4 个用户可选值。- vsIcon:以大图标方式显示。
- vsSmallIcon:以小图标方式显示。
- vsList:以简单列表方式显示,不能进行拖放操作。
- vsReport:以详细列表方式显示,最左边的栏显示项的图标和标签。
三.TListView 组件的重要事件
OnColumnClick | 当用户单击栏的表头时,将触发该事件 |
OnColumnDragged | 当用户用鼠标左键拖动某一栏到一个新的位置时,将触发该事件 |
OnEdited | 当用户直接编辑修改了项的标签后,将触发该事件 |
OnGetImageIndex | 当一个项将要在屏幕上刷新时,将触发这个事件 |
OnInfoTip | 通过这个事件给列表视图中的每一项加上提示 |
OnSelectItem | 当列表视图中一个项被选择时,将触发这个事件 |
下面介绍程序中TListView 组件的常用事件。
(1)OnColumnClick 事件
当用户单击栏的表头时,将触发该事件。这样就可以对项进行排序。在OnColumnClick 事件中有一个TListColumn 类型的参数Column,此参数返回用户单击的栏,利用Column 参数可以对用户选中的栏进行访问及设置。(2)OnColumnDragged 事件
当用户用鼠标左键拖动某一栏到一个新的位置时,将触发该事件。在使用此事件之前必须将TListView 组件的FullTrag 属性设置为True,表示可以拖动栏的位置,否则不能拖动,也就不能触发此事件。(3)OnEdited 事件
当用户直接编辑修改了项的标签后,将触发该事件。OnEdited 事件中有一个TListItem 类型的参数Item,利用此参数可以对用户编辑的项进行访问;OnEdited 事件中还有一个String 类型的参数S,它是用户更改项的标签后,显示标签的内容。(4)OnInfoTip 事件
通过这个事件可以为列表视图中的每一项加上提示。OnInfoTip 事件中有一个TListItem 类型的参数Item,利用此参数可以对用户编辑的项进行访问;OnInfoTip 事件中还有一个String 类型的参数InfoTip,更改它的值就可以为每一项加上提示。例如将每一项的提示设置为项的标签内容,就可以在OnInfoTip 事件中添加如下代码:
InfoTip:=Item.Caption;
如果要显示提示信息,必须将TListView 组件的ShowHind 属性设置为True。
(5)OnSelectItem 事件
当列表视图中一个项被选择时,将触发这个事件。OnSelectItem 事件中有一个TListItem 类型的参数Item,利用此参数可以对用户编辑的项进行访问;OnSelectItem 事件中还有一个Boolean 类型的参数Selected。每次选择一个新项时将两次触发此事件,一次是释放以前被选择的项,Selected 参数取值为False,代表释放Item 参数指定的项;另外一次是选择新的项,Selected 参数取值为True,代表选择Item 参数指定的项。四.TListView 组件的重要方法
AlphaSort | 将列表视图中的项按标签的字母顺序排序 |
Arrange | 此方法用于重排图标 |
FindCaption | 此方法用于搜索并返回一个项 |
Scroll | 此方法使列表视图滚动 |
StringWidth | 此方法返回字符串的宽度 |
UpdateItems | 此方法重画指定范围内的项 |
下面介绍程序中TListView 组件常用的方法。
(1)AlphaSort 方法
此方法可以将列表视图中的项按标签的字母顺序排序。例如使用下面的代码就能够将ListView1组件的项按标签的字母顺序排序:ListView1.AlphaSort;
(2)Arrange 方法
此方法用于重排图标。Arrange 方法只有在ViewStyle 属性为vsIcon 或vsSmallIcon 时才起作用。Arrange 方法中有一个TListArrangement 类型的参数Code,此参数用于指定图标的排列方式,其取值及功能如下。
- arAlignBottom:图标底部对齐排列。
- arAlignLeft:图标左侧对齐排列。
- arAlignRight:图标右侧对齐排列。
- arAlignTop:图标顶部对齐排列。
- arDefault:按照窗口刚建立时的风格将图标从顶部排列。
- arSnapToGrid:将图标对齐到最近的网格,此值不支持虚拟模式。
(3)FindCaption 方法
此方法的调用可以搜索并返回一个TListItem 类型的项。FindCaption 方法中有5 个参数,功能如下。- StartIndex:Integer 类型,用于指定开始搜索的起始位置。
- Value:String 类型,指定要搜索的项的标题符合的内容。
- Partial:Boolean 类型,取True 值,查找标题开头为Value 参数指定的项;取False 值,查找标题与Value 参数指定的内容相同的项。
- Inclusive:Boolean 类型,取True 值,被StartIndex 指定的项是第1 个被选中的;取False 值,开始查找的位置从StartIndex 拟定的下一个位置开始。
- Warp:Boolean 类型,取True 值,搜索将从开始找到最后;取False 值,搜索从StartIndex 位开始查找,找到最后。
(4)Scroll 方法
此方法可以使列表视图滚动。Scroll 方法有两个Integer 类型的参数。- DX:控制视图的左右一次移动的像素数,正数代表向右移动,负数代表向左移动。
- DY:控制视图的上下一次移动的像素数,正数代表向下移动,负数代表向上移动。
(5)StringWidth 方法
此方法用于返回字符串的宽度。StringWidth 方法中用到一个String 类型的参数S,StringWidth 方法是根据当前TListView 组件的字体、字号返回参数S 指定的字符串宽度的像素数。(6)UpdateItems 方法
此方法可以重画指定范围内的项。UpdateItems 有两个Integer 类型的参数:- FirstIndex:用于指定重画项的开始位置。
- LastIndex:用于指定重画项的最后位置。
以上是关于delphi TListView的主要内容,如果未能解决你的问题,请参考以下文章