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