ListView 控件属性与方法.docx
《ListView 控件属性与方法.docx》由会员分享,可在线阅读,更多相关《ListView 控件属性与方法.docx(19页珍藏版)》请在冰点文库上搜索。
ListView控件属性与方法
ListView控件可以用来显示各项带图标的列表,也可以用来显示带有子项的列表,Windows操作系统的资源管理器中文件夹窗口就是最好的应用例子。
如下图一所示就是“我的电脑”中使用ListView控件来显示本机所有盘符:
说明:
可以通过“查看”菜单来观察其它三种显示方式,这些都是ListView的视图模式之一。
下面我们就先来了解下ListView控件的基本应用,在中的工具箱中,ListView控件的图标如下图二所示:
一、View属性
ListView控件作为一个可以显示图标或者子项的列表控件,它最重要的属性就是View属性,该属性决定了以哪种视图模式显示控件的项,这四种视图模式分别如下:
1、LartIcon:
大图标视图模式,在项的文本旁显示大的图标,在控件宽度足够的情况下,项是如图一中的盘符一样优先以平行排列的,排列不完的则自动换行显示在新行中。
2、SmallIcon:
小图标视图模式,与大图标模式一样,但是显示的是小的图标。
3、List:
列表视图模式,显示小图标,但是项是垂直排列的,只显示单列。
4、Details:
详细资料视图模式,是最丰富的选项,它不但允许您查看项,还允许您查看为各项指定的任何子项。
各项在网格中显示,它们垂直排列且其子项会显示在列中(带有列标头)。
对应地,只有在Details视图模式中起作用的控件属性为:
GridLines和FullRowSelect,GridLines属性指示在包含控件中项及其子项的行和列之间是否显示网格线。
FullRowSelect属性指示单击某项是否选择其所有子项(即整行选中),如下图三所示便是GridLines和FullRowSelect属性都设置为True的情况:
ListView控件中还有一个HeaderStyle属性也是在Details视图模式下才起作用,HeaderStyle属性指示列标头样式,它有下面三种显示样式:
1、Clickable:
列标头的作用类似于按钮,单击时可以执行操作(例如排序)。
2、Nonclickable:
列标头不响应鼠标单击。
3、None:
列标头在报表视图中不显示。
二、Items属性
此外,ListView控件最重要的属性是Items属性,它包含了控件所有的存在的项。
SelectedItems属性是控件当前选定项的集合,同时和它关联的SelectedIndices属性是控件中选定项的索引集合,如下示例所示,我们分别在SelectedItems属性和SelectedIndices属性中获取所选项索引,窗体上拖放了ListView控件和一个Button控件,且已经往ListView控件中添加了若干列和行,代码如下:
PrivateSubButton1_Click(ByValsenderAs,ByValeAsHandles
DimiAsInteger=0
DimstrAsString=""
Next
(str)
EndSub
运行后显示效果如下图四所示:
两个属性都能获得所选项在控件中的索引,我们在实际应用的时候可以灵活选择使用它们中的一个,以达到简化代码的目的。
三、ListView的其他重要属性
ListView控件还有一些比较常用的重要属性
1、Activation属性
Activation属性指定用户激活ListView控件中的项的方式,它包括三个可选值:
OneClick:
用户必须单击以激活项。
光标更改为手形指针光标,项文本在用户将鼠标指针移动到项上时更改颜色。
Standard:
用户必须双击以激活项。
在用户将鼠标指针移动到项上时没有提供任何反馈。
TwoClick:
用户必须双击以激活项,项文本在用户将鼠标指针移动到项上时更改颜色。
激活ListView中的项与只选择项是不同的。
当激活某个项时,通常会在ItemActivate事件的事件处理程序中执行一个操作。
例如,当激活某个项时,您可能会打开一个文件或显示一个允许用户对项进行编辑的对话框。
通常,项的激活是通过用户对它进行双击来实现的。
如果Activation属性设置为OneClick,那么单击该项一次即可将其激活。
将Activation属性设置为TwoClick与标准的双击不同,这是因为两次单击之间的时间间隔可以是任意的。
注意如果将Activation属性设置为或,则不管LabelEdit属性的值是什么,都不允许进行标签编辑。
设置Activation属性实际上就是决定以何种方式来触发ItemActivate事件,如果我们需要在激活项的时候进行额外的操作,例如弹出一个关联的对话框来,则可以在ItemActivate事件中编写合适代码来完成,如下代码所示:
PrivateSubListView1_ItemActivate(ByValsenderAsObject,ByValeAsHandles
("你想做什么")'可以在这里添加我们需要的操作
EndSub
代码运行后,我们激活选项,如下图五所示:
2、LabelEdit属性
LabelEdit属性指示用户是否可以编辑控件中项的标签。
当LabelEdit属性设置为true时,用户可以单击项文本,将其选中,然后再次单击项文本,将标签文本置于编辑模式,然后,用户可以修改或替换项的文本标签。
在用户编辑项文本之前和之后,您可以使用BeforeLabelEdit和AfterLabelEdit事件来执行任务。
如果该属性设置为true,则无法修改子项的文本。
要更改子项的文本,您可以在用户双击控件中的子项时为其显示对话框。
3、LabelWrap属性
LabelWrap属性指示当项作为图标在控件中显示时,项标签是否换行。
当LabelWrap属性设置为true时,如果需要,项文本会换至文本的下一行。
如果文本长于两行,则文本将缩短。
如果用户选择了该项,则显示所有项文本。
如果LabelWrap属性设置为false,则所有项文本都将显示在单独一行中。
整个项文本在LabelWrap设置为false时显示。
只有在View属性设置为LargeIcon或SmallIcon时才使用该属性。
4、MultiSelect属性
MultiSelect属性指示是否可以选择多个项。
当MultiSelect属性设置为true时,可在ListView控件中选择多个项。
5、Scrollable属性
Scrollable属性指示在没有足够空间来显示所有项时,是否显示滚动条。
6、Sorting属性
Sorting属性指示控件中项的排序顺序。
Sorting属性允许指定项在ListView控件中是否排序。
默认情况下,不执行排序。
当Sorting属性设置为Ascending或Descending时,ListView中的项自动按照升序字母顺序(当属性设置为Ascending时)或降序字母顺序(当属性设置为Descending时)进行排序。
您可以使用该属性对ListView控件中显示的项进行自动排序,使用户在大量项可用时更容易查找到项。
如果您要自己执行对项的排序,而不使用Sorting属性,可与Sort方法一起使用ListViewItemSorter属性。
7、LargeImageList属性
LargeImageList属性设置当项以大图标在控件中显示时使用的ImageList。
8、SmallImageList属性
SmallImageList属性设置当项以小图标在控件中显示时使用的ImageList。
上面我们了解了ListView的一些主要属性,下面我们来看如何使用它。
四、向ListView控件添加项
1、我们可以使用ListViewItem集合编辑器来为控件添加项
方法是在ListView控件的属性窗口中选择Items属性。
2、还可以使用ListView控件的()方法来为它添加新的项,Add()方法的格式如下:
Add(text,imageIndex)
text为要添加项所显示的文本
imageIndex为可选参数,指示所对应ImageList中的图标索引
示例:
为窗体添加一个ListView控件,一个ImageList控件,一个Button控件,然后在代码编辑器中添加如下代码:
PrivateSubButton1_Click(ByValsenderAs,ByValeAsHandles
DimmItemAsListViewItem
DimiAsInteger=0
=
=
Fori=0To3
Next
EndSub
运行后,单击按钮,效果如下图六所示:
也可以使用如下代码来添加Item,其运行效果是一样的:
PrivateSubButton1_Click(ByValsenderAs,ByValeAsHandles
=
=
Dimitem0AsNewListViewItem("item0",0)
Dimitem1AsNewListViewItem("item1",1)
Dimitem2AsNewListViewItem("item2",2)
Dimitem3AsNewListViewItem("item3",3)
=
EndSub
五、为ListView控件添加列标题
当我们使用ListView控件的Details视图模式的时候,就必须为控件添加对应的列标题,才能显示出它所有的项。
1、视图模式下添加列标题
一般我们显示一个列表的时候,其列标题都应该是固定的,所以我们可以在视图模式中预先设置好列标题,这样比较直观。
先选中ListView控件,然后在它的属性窗口中找到Columns属性,单击后面的省略符号,如下图七所示:
然后在弹出的集合编辑器中添加和删除列标题即可,我们可以在编辑器的右边中编辑对应的列显示的文本、宽度以及文字对齐方式,如下图八所示:
添加完列标题之后记得把ListView控件的View属性设置为Details,才能显示出列标题来。
2、使用代码来添加列标题
我们可以使用方法来动态添加列标头,使用()方法来清除所有的列标头,如下代码所示,动态添加四个列标题,其中每个列头的宽为50,
PrivateSubButton1_Click(ByValsenderAs,ByValeAsHandles
=
=True
ListV
()
EndSub
1.OptionExplicit
2.PrivateSubForm_Load()
3.=True
4.
5.DimfNameAsString
6.IfLen=3Then
7.fName=&"学生名单.xls"
8.Else
9.fName=&"\学生名单.xls"
10.EndIf
11.GetExcelDatafName,ListView1
12.EndSub
13.PrivateSubGetExcelData(ByValfileNameAsString,ByReflvwAsListView)
14.DimMyXlAsObject
15.'测试MicrosoftExcel的副本是否在运行。
16.OnErrorResumeNext'延迟错误捕获。
17.'不带第一个参数调用Getobject函数将
18.'返回对该应用程序的实例的引用。
19.'如果该应用程序不在运行,则会产生错误。
20.SetMyXl=GetObject(,"")
21.If>0Then
22.'如果发生错误则要清除Err对象。
23.SetMyXl=CreateObject("")
24.EndIf
25.
26.DimwsBookAsWorkbook
27.DimwsSheetAsWorksheet
28.
29.SetMyXl=GetObject(fileName)
30.
31.'在此处对文件
32.'进行操作。
33.SetwsSheet=("Sheet1")
34.
35.WithwsSheet
36.DimrowAsLong
37.row=.(xlCellTypeLastCell).row
38.DimiAsLong
39.DimitmXAsListItem
40.Fori=2Torow
41.
(1)=.Cells(i,3)
42.
(2)=.Cells(i,4)
43.(3)=.Cells(i,5)
44.(4)=.Cells(i,6)
45.Next
46.EndWith
47.=False
48.
49.SetMyXl=Nothing'释放对该应用程序
50.'和电子数据表的引用。
51.EndSub
52.PrivateSubListView1_ItemClick(ByValItemAs
53.Text1=
54.Text2=
(1)
55.Text3=
(2)
56.Text4=(3)
57.Text5=(4)
58.EndSub
PublicSubLVrefresh(OptionalByValStandardTypeAsBoolean)
DimintRowAsInteger,strTempAsString
DimfileNoAsInteger,fileNameAsString
DimFpAsNewFileSystemObject
DimstrTsAsTextStream
DimListItemTempAsListItem
OnErrorResumeNext
fileNo=FreeFile
WithListView1
.
.
.,,"姓名"
.ColumnHeaders
(1).Width=1200
.,,"年龄"
.ColumnHeaders
(2).Width=900
.,,"职位"
.ColumnHeaders(3).Width=2000
.,,"联系电话"
.ColumnHeaders(4).Alignment=lvwColumnLeft
.ColumnHeaders(4).Width=2000
intRow=1
fileName=IIf(Left,1)="\",&"",&"\")
SetstrTs=(fileName)
strTemp=
DoWhile=0
IfintRow=1Then
SetListItemTemp=.(,,strTemp)
Else
(intRow-1)=strTemp
EndIf
IfintRow=4Then
intRow=1
Else
intRow=intRow+1
EndIf
strTemp=
Loop
EndWith
EndSub
PrivateSubCommand1_Click()
LVrefresh
EndSub
PublicSubLVrefresh(OptionalByValStandardTypeAsBoolean)
DimintRowAsInteger,strTempAsString
DimfileNoAsInteger,fileNameAsString
DimFpAsNewFileSystemObject
DimstrTsAsTextStream
DimListItemTempAsListItem
OnErrorResumeNext
fileNo=FreeFile
WithListView1
.
.
.,,"姓名"
.ColumnHeaders
(1).Width=1200
.,,"年龄"
.ColumnHeaders
(2).Width=900
.,,"职位"
.ColumnHeaders(3).Width=2000
.,,"联系电话"
.ColumnHeaders(4).Alignment=lvwColumnLeft
.ColumnHeaders(4).Width=2000
intRow=1
fileName=IIf(Left,1)="\",&"",&"\")
SetstrTs=(fileName)
strTemp=
DoWhile=0
IfintRow=1Then
SetListItemTemp=.(,,strTemp)
Else
(intRow-1)=strTemp
EndIf
IfintRow=4Then
intRow=1
Else
intRow=intRow+1
EndIf
strTemp=
Loop
EndWith
EndSub
PrivateSubCommand1_Click()
LVrefresh
EndSub
常用属性:
View设置或返回控件的视图类型
值说明
1-LvwIcon图标类型
2-LvwSmallIcon小图标类型
3-LvwList列表类型
4-LvwReport报表类型
Arrange设置后返回控件的图标排列方式(在图标视图下有效)
值说明
1-LvwNone不排列
2-LvwAutoLeft自动靠右排列
3-LvwAutoTop自动靠左排列
Icons、SmallIcons、ColumnHeaderIcons属性
Icons指定图标视图时的图标与ImageList的绑定
SmallIcons、ColumnHeaderIcons指定列表视图时的图标与ImageList的绑定
PICTURE、PictureAlignment属性
分别指定ListView控件的背景图片和布局方式
ListItems(Index)属性
ListItems属性是ListView控件中列表项的集合。
Index用于指定列表项集合中的一个对象,
我们可以把这个对象看作对一行的引用
ListItems集合的属性
1.Text设置或返回显示文本
2.key关键字
3.index索引编号
4.icon,smallicon不同视图时显示单元格的图标
5.checked给checkboxes打√
6.selected使处于选定状态
7.ListSubitems(index)集合我们可以把这个集合看作对这行中单元格的引用
Text设置或返回单元格显示的内容
Reporticon设置单元格的图标
8.Subitems(index)设置或返回单元格文本==ListSubitems(index).text
ColumnHeaders(index)属性
ColumnHeaders属性是ListView控件中列标头的集合
1.text显示标题文本
2.key
3.index
4.icon指定标题图标
5.alignment指定index列的对齐方式(注意:
第一列也就是列表项不能指定)
6.position返回当前列的索引
7.subitemindex返回指定列的listsubitem索引
TextBackgroud属性
决定text的背景是透明还是ListView的背景色
值0lvwTransparent透明
1lvw不透明(用listview的背景色)
Ghosted属性logic
决定是否虚状
HideColumnHeaders属性
隐藏表头
LabelWrap属性
标签转行或时才使用该属性
FullRowSelect
整行显示
HotTracking
热点追踪鼠标指针自动调整为手型
HoverSelection属性
自动聚焦鼠标指针自动调整为手型
AllowColumnReorder属性
值设置.t.时,用户可以用鼠标选中1列拖至其他地方进行重新排列
Sorted属性
当值为.t.时,列表按字母排序
常用方法:
(index,key,text,icon,smallicon)
向listitems添加一列表项。
Index插入列表项的编号
Key插入列表项的关键字
Text插入列表项的文本
Icon当为图标视图时要求显示的图标
Smallicon当为小图标视图时要求显示的图标
Clear
清除listitems集合中所有的列表项
Remove清除选定行
L1=
AllowColumnReorder属性
值设置.t.时,用户可以用鼠标选中1列拖至其他地方进行重新排列
常用事件:
AfterLabelEdit
编辑当前选择的列表对象之后发生
BeforeLabelEdit
编辑当前选择的列表对象之前发生
ItemClick
单击某一列表对象时发生
参数item对当前列表项的引用
事件
AfterLabelEdit:
编辑ListItem对象的标签时被触发。
BeforeLabelEdit:
编辑ListItem对象的标签后出发。
ColumnClick:
单击列标题时触发。
参数中可以获得被单击的列对象。
通常用于排序。
ItemClick:
单击某行或某ListItem时触发。
参数中可以获得被单击的ListItem对象。
方法
FindItem:
搜索ListItem对象。
参数:
string:
搜索字符串。
value:
在ListItem的哪部分中搜索(LvwText、LvwSubItem、LvwTag);index:
开始搜索的位置。
match:
匹配方式。
HitTest:
检索位于特定坐标处的ListItem对象。
vb中的实例
PrivateSubForm_load()
'确保ListView控件的view属性为报表视图。
=lvwReport
'添加三列。
'向控件添加ListItem对象。
DimitmXAsListItem
'添加column1的名称。
'使用SubItemIndex将SubItem与正确的ColumnHeade