LISTVIEW控件并不是默认的工具箱的配置项目,你必须要手工添加---单击"工程"菜单项目,选择"部件",在部件对话框的"控件"栏目中选择"MICROSOFT
WINDOWS COMMON CONTROLS
6.0",确认在它前面的复选框中有一个黑色的对号,单击"确认"
按钮,这时你的工具箱中便添加了几个控件,其中,有五个空心圆圈的便是LISTVIEW控件了,
当然怎么把它添加到窗体上就不用我多说了吧。
----
我个人认为,作为一个增强功能的列表框,它的本质是用来显示更多的信息的.因此,
在这篇文章中,我着重介绍它VIEW属性的LVWREPORT(报表)值的使用.至于它的外观怎样设计,诸位当然可以随心所欲了.为了直观一点,我举一个应用实例来说明。
----
设计完成后的主界面参见图一,它实际上是一个增强功能的文件浏览器。
----
首先新建一个标准EXE工程,主窗体名称为FRMMAIN,添加一个驱动器列表框DRIVE1,一个文件列表框FILE1(设置VISIBLE属性
FALES,PATTERN属性(*.EXE;*.DLL)),一个目录列表框DIR1,一个增强列表框LISTVIEW1,一个IMAGE控件
IMAGE1和一个IMAGELIST控件IMALIST1,在IMALIST1控件上单击右键,设计IMAGELIST控件,添加一个你最喜欢的图标
(最好使用ICON图标),索引为一。在主窗体FRMMAIN的通用声明段输入以下代码:
Dim clmX As ColumnHeader;标题栏
Dim itmX As ListItem;列表项目
Dim Counter As Long;计数器
Dim Fname As String;读取文件名
Dim dname As String;增强列表框完整路径名称
Public CurrentDir As String;完整的目录名称
在主窗体的LOAD事件中写入以下代码:
Private Sub Form_Load()
Me.Caption = App.Title;
窗体的标题为生成可执行文件的标题
Me.Left = (Screen.Width - Me.Width) / 2
Me.Top = (Screen.Height - Me.Height) / 2;
窗体位置在屏幕中间
ListView1.ColumnHeaders.Add ,
, "文件名称",ListView1.Width / 3, 0
’第一个标题栏是“文件名称“,长度为ListView1
宽度的三分之一,文字左对齐
Set clmX = ListView1.ColumnHeaders.Add(,
, "序号", ListView1.Width / 5, 2)
’第二个标题栏是“序号“ 依次往下
Set clmX = ListView1.ColumnHeaders.Add(,
, "文件大小 ", ListView1.Width / 4, 1)
Set clmX = ListView1.ColumnHeaders.Add(,
, "创建时间", ListView1.Width / 3, 0)
ListView1.BorderStyle = ccFixedSingle;边界类型
ListView1.SmallIcons = ImageList1 ;
关联图标仓库ImageList1
For Counter = 0 To File1.ListCount - 1
Fname = File1.List(Counter);
获取当前目录下符合条件的文件名
Set itmX = ListView1.ListItems.Add(,
, Fname)’文件名称栏目
itmX.SubItems(1) = CStr(Counter + 1) +
"/" + CStr(File1.ListCount)’文件在列表框位置
itmX.SubItems(2) = CStr(FileLen(Fname));
文件长度
itmX.SmallIcon = 1;列表项目图标
itmX.SubItems(3) = Format(FileDateTime(Fname),
"hh:mm yyyy/MMMM/dd");文件创建时间
Next Counter
ListView1.View = lvwReport;报表类型
ListView1.Arrange = 0
ListView1.LabelWrap = False
Dir1.ToolTipText = "当前目录是:" &
Dir1.Path
END SUB
双击驱动器列表框,输入以下代码:
Private Static Sub Drive1_Change()
On Error GoTo IFerr;拦截错误
Dir1.Path = Drive1.Drive;关联目录列表框
Exit Sub
IFerr:;如果磁盘错误
MsgBox
("请确认驱动器是否准备好或者磁盘已经不可用!"),
vbOKOnly + vbExclamation
;弹出注意对话框
Drive1.Drive=Dir1.Path;忽略驱动器改变
End Sub
双击目录列表框,输入以下代码:
Private Static Sub Dir1_Change()
File1.Path = Dir1.Path;关联文件列表框
If Right(Dir1.Path, 1) < > "\"
Then
CurrentDir = Dir1.Path & "\"
Else
CurrentDir = Dir1.Path
End If;设置选定的目录名称
ListView1.ListItems.Clear;清除过期的列表项目
For Counter = 0 To File1.ListCount - 1
Fname = File1.List(Counter)
Set itmX = ListView1.ListItems.Add
(, , Fname);添加文件名
itmX.SubItems(1) = CStr(Counter + 1) + "/"
+ CStr(File1.ListCount)
itmX.SubItems(2) = CStr(FileLen(CurrentDir &
Fname))
itmX.SmallIcon = 1
itmX.SubItems(3) = Format(FileDateTime(CurrentDir
& Fname), "HH:MM YYYY/MMMM/DD")
Next Counter;添加增强列表框的各个项目
Dir1.ToolTipText = "当前目录是:" &
Dir1.Path;提示
End Sub
----
通过以下代码取得鼠标单击增强列表框返回的项目名称:
Private Sub ListView1_ItemClick(ByVal Item As
MSComctlLib.ListItem)
allfname = Item;文件名
dname= CurrentDir&
Item;完整的路径和文件名
sElectmain = ListView1.SelectedItem.Index;文件序号
End Sub
listview控件可有4种不同的视图显示方法,跟“资源管理器”里的“查看”方式相似:(1)无图标;(2)小图标;(3)列表;(4)报表式。
使用哪种视图,可由该控件的view属性设置控制。
其中“报表”视图用来显示记录数据很适合。
listview控件包括listItem对象和ColumnHeader对象。
本人简单理解为:listItem对象看成数据行;ColumnHeader对象看成列标题。
listItem对象(行)有两部分:一部分是图标和简要描述的文本(第1列);另一部分是前者的子项文本信息(第2列,第3列......)。
而listItems即是对listItem对象集合(所有行)的引用。
故此,listItems(1) 可以表示为第1行;
listitems(1).text 返回第1行第1列的文本值;
listitems(1).subItem(1) 返回第1行第2列的文本值。
【 控件常用属性 】
[1]view属性
该属性有4个值可设定:
1---小图标视图显示
2---列表
3---报表
0---无图标(默认)
[2]AllowColumnReorder属性
值设置.t.时,用户可以用鼠标选中1列拖至其他地方进行重新排列。
[3]Checkboxes属性
设置为.t.时,每一行数据前将显示一复选框。
[4]FlatScrollBar属性
设置为.f.时控件将显示滚动条。
[5]FullRowSelect属性
设置为.t.时可以整行地选择数据。
[6]GridLines属性
设置为.t.时控件将显示网格线。(只作用于“报表”视图)
[7]HideColumnHeaders属性
设置为.f.时,列标题可视,反之则不可视。
[8]HotTracking属性
设置为.t.时,鼠标所在行将以高亮度显示。
[9]Icons,SmallIcons属性
两者设置listview控件视图相关联的ImageList控件中的图片。
Icons指明视图为大图标时的关联;
SmallIcons指明视图为小图标时的关联。
[10]LabelWrap属性
设置为.t.时,文本标签超出列宽时可换行。
[11]SelectedItem属性
返回对所选ListItem对象(行)的引用。
[12]Sorted属性
当值为.t.时,列表按字母排序。
[13]Picture属性
指定控件的背景图片,此属性在控件自带属性设置框里设置。
*****************************************************************
【 控件常用方法程序 】
[1]Add方法
添加listItem对象(行)到控件中。
语法格式:
控件ListItems集合.add(index,key,text,icon,smallIcon)
[2]FindItem方法
查找并返回对控件中listItem对象的引用。
语法格式:
控件名.FindItem(string,value,index,match)
******************************************************************
新建一表单,在表单里拖出一个ListView控件和一个ImageList控件。
选中ListView控件,单击右键,选择“ListViewCtrl Properties”,在General页面框中选中下列复选框:
LabelWrap:文本可换行
Checkboxes:显示复选框
FullRowSelect:整行选定
清除FlatScrollBar的选定,控件将显示滚动条。
**************************************************************
控件 name属性
ListView view1
ImageList Image1
***************************************************************
在表单的Init事件中加入下列代码:
&&&&将ImageList控件图片赋予Listview控件&&&&
thisform.view1.Icons=thisform.Image1.object
thisform.view1.smallIcons=thisform.Image1.object
****************************************************************
在listview控件init事件中加入下列代码:
&&&初始化ListView控件&&&&
&&设置显示为报表视图
this.view=3
&&添加和设置列标
store this.ColumnHeaders.Add(,"l11","序号",this.Width/7) to clm1
store this.ColumnHeaders.Add(,"l12","物资编号",this.width/4) to clm2
store this.ColumnHeaders.Add(,"l13","存货名称",this.Width/4) to clm3
store this.ColumnHeaders.Add(,"l14","规格",this.width/4) to clm4
store this.ColumnHeaders.Add(,"l15","计量单位",this.Width/8) to clm5
store this.ColumnHeaders.Add(,"l16","请购数量",this.width/4) to clm6
store this.ColumnHeaders.Add(,"l17","使用日期",this.Width/4) to clm7
store this.ColumnHeaders.Add(,"l18","请购用途",this.width/4) to clm8
this.hottracking=.t. &&鼠标停留行高亮度显示
******************************************************************
将数据表添加到listview控件中显示:
新建一表单方法程序 refresh_grid,可随时调用刷新数据。
在其中加入下列代码:
L1=thisform.view1
L1.listItems.clear &&清除数据
sele 请购表
scan
&&添加listItem对象第1列图标和文本。
store L1.listItems.Add(,,序号,,1) to bbb
&&添加第2,3...列文本
store alltrim(物资编号) to bbb.subitems(1)
store alltrim(存货名称) to bbb.subitems(2)
store alltrim(规格) to bbb.subitems(3)
store alltrim(计量单位) to bbb.subitems(4)
store 请购数量 to bbb.subitems(5)
store 使用日期 to bbb.subitems(6)
store alltrim(请购用途) to bbb.subitems(7)
endscan
注:若字段值为.null.时,添加时将出现错误提示。
请自行设置用函数加以判别。为.null.时可以空值添加。
************************************************
如何返回选定值:
L1=thisform.view1
L1.selectedItem.text &&返回选定行第1列文本值
L1.selectedItem.index &&返回选定行的位置
L1.listItems(x).subItems(y) &&返回第x行,第y+1列文本值
*****
如何用用命令设置复选框状态:
thisform.view1.listItems(x).checked=.t.
&&第x行复选框选定
******************************************
选定复选框时发生的事件itemcheck:
LPARAMETERS item
if item.checked=.t.&&判定当复选框选中
要执行的语句
else
要执行的语句
endif
&&清除所有数据
thisform.view1.listItems.clear
&&清除选定行
L1=thisform.view1
L1.listitems.remove(L1.selectedItem.index)
得知所有行的总数:
L1.listitems.count