ListView控件是一个比较复杂的控件。它可以在它的标准列表框中进行各种查看操作(如大图标,小图标,详细信息等)
        下面做一个简单的例子。
        创建一个新窗体form1
        在上面添加几个控件如下:再添加两个imagelist控件,取名为smallIL与largeIL,把largeIL的imagesize设为32,32,并为它的images添加两个ICON,一个为文件夹图标,一个为文件图标。也为smallIL添加两个这样的图标。
然后设置listview的smallimagelist为smallIL,largeimagelist为largeIL,view为details下面说明一下listview显示为details(详细信息)时的几个要点:
listview的选项
       列表视图中的主选项是一个ListViewItem类的实例,然后这个选项又有一个子选项SubItems,如果ListView在details模式下,子选项就会显示出来。子选项和主选项的区别是,主选项可以有图标,子选项没有。
listview的列标题
        columns,也相当于列名。要显示列表题,就要把ColumnsHeader的实例添加到listview的columns中,在listview处于details模式下 ,ColumnsHeader为listview提供一个标题。
现在可以开始编定代码了。
    我们首先写一个方法,为listview创建标题
     
   private void createHeader()//为listview添加列名
{
   ColumnHeader ch=new ColumnHeader();
   ch.Text="文件名";
   this.listView1.Columns.Add(ch);   ch=new ColumnHeader();
   ch.Text="大小";
   this.listView1.Columns.Add(ch);   ch=new ColumnHeader();
   ch.Text="修改日期";
   this.listView1.Columns.Add(ch);}
然后再写一个方法,为listview添加选项
        private void createitem(string root)
{
   ListViewItem lvi;
   ListViewItem.ListViewSubItem lvsi;
   System.IO.DirectoryInfo dir=new System.IO.DirectoryInfo(root);
   System.IO.DirectoryInfo[] dirs=dir.GetDirectories();
   System.IO.FileInfo[] files=dir.GetFiles();   listView1.Clear();//注意这个函数是把listview里的所有选项与所列名都删除   listView1.BeginUpdate();   foreach(System.IO.DirectoryInfo di in dirs)
   {
    lvi=new ListViewItem();
    lvi.Text=di.Name;
    lvi.Tag=di.FullName;
    lvi.ImageIndex=0;    lvsi=new System.Windows.Forms.ListViewItem.ListViewSubItem();
    lvsi.Text="";
    lvi.SubItems.Add(lvsi);    lvsi=new System.Windows.Forms.ListViewItem.ListViewSubItem();
    lvsi.Text=di.LastAccessTime.ToString();
    lvi.SubItems.Add(lvsi);    this.listView1.Items.Add(lvi);
   }
   foreach(System.IO.FileInfo fi in files)//把文件信息添加到listview的选项中
   {
    lvi=new ListViewItem();
    lvi.Text=fi.Name;
    lvi.ImageIndex=1;
    lvi.Tag=fi.FullName;    lvsi=new System.Windows.Forms.ListViewItem.ListViewSubItem();
    lvsi.Text=fi.Length.ToString();
    lvi.SubItems.Add(lvsi);    lvsi=new System.Windows.Forms.ListViewItem.ListViewSubItem();
    lvsi.Text=fi.LastAccessTime.ToString();    lvi.SubItems.Add(lvsi);    this.listView1.Items.Add(lvi);   }
    this.listView1.endupdate();
}然后在Form1的构造函数里添加:
public Form1()
{
    createitem(@“c:\“);//注意这两个函数的次序不能颠倒,因为createitem里有一句命令listView1.clear()
                                    把所有的列名也都删除了,如果createheader在前,listview就没有列名了。
    createheader();
}
现在运行程序,就可以看到listview里面列出了所有c:\下的文件夹与文件信息,下面再添加四个 单选按钮的事件处理程序
private void rdosmall_CheckedChanged(object sender, System.EventArgs e)
{
   if(this.rdosmall.Checked==true)
   {
    this.listView1.View=View.SmallIcon;
   }
}
private void rdolarge_CheckedChanged(object sender, System.EventArgs e)
{
   if(this.rdolarge.Checked==true)
   {
    this.listView1.View=View.LargeIcon;
   }
}private void rdodetails_CheckedChanged(object sender, System.EventArgs e)
{
   if(this.rdodetails.Checked==true)
   {
    this.listView1.View=View.Details;
   }
}private void rdolist_CheckedChanged(object sender, System.EventArgs e)
{
   if(this.rdolist.Checked==true)
   {
    this.listView1.View=View.List;
   }
}现在运行程序,点击单选按钮,就可以变换listview的显示模式。下面再为listview的itemActivate事件添加处理程序,目 的是当我们选择listview中的选项时,如果它是文件夹就打开这个文件夹,显示里面的信息,如果它是文件,就打开这个文件。
不过我们还应该注意一点,就是当我们打开一个新文件夹时,还会用到后退功能。所以,我们应该用一个字符串记录下前一个文件夹路径,用于后退到这个前一个文件夹下面,我们在类Form1中添加个成员
private System.Collections.Specialized.StringCollection colstr=new System.Collections.Specialized.StringCollection();然后添加itemActivate的处理程序
首先在Form1的构造函数里添加
this.listView1.ItemActivate+=new EventHandler(listView1_ItemActivate);然后添加函数
private void listView1_ItemActivate(object sender,System.EventArgs e)
{
   ListView lv=(ListView)sender;
   string filename=lv.SelectedItems[0].Tag.ToString();   if(lv.SelectedItems[0].ImageIndex==0)//如果是文件夹,就打开它
   {
    createitem(filename);
    createHeader();
    colstr.Add(filename);//把打开的方件夹的路径记录下来,
                                     这里是因为我们现在的路径是已知的,不用记录。
   }
   else//如果是文件,就执行它
   {
    System.Diagnostics.Process.Start(filename);
   }
}下面,再添加BACK按钮的CLICK事件处理程序,实现后退功能private void btnback_Click(object sender, System.EventArgs e)
{
   if(colstr.Count>1)
   {
    createitem(colstr[colstr.Count-2]);
    colstr.RemoveAt(colstr.Count-1);
    createHeader();
   }
   else if(colstr.Count==1)
   {
    createitem(@"c:\");
    createHeader();
    colstr.Clear();
   }
}

解决方案 »

  1.   

    要使用ListView控件,需要加入组件: 
    Microsoft Windows Common Controls 6.0 
    Windows资源管理器的右半部分,就是一个ListView控件。  作用 
    列出并列关系的对象及对象属性。 
     
    ListView控件的对象层次结构 
    ListView -整个控件 
    ColumnHeaders -标题行 
    ColumnHeader -标题列 
    ListItems -对象行集合 
    ListItem -对象行 
    ListSubItems -对象属性集合 
    ListSubItem -对象属性 
    注意:SubItems和ListSubItems的区别:SubItems是一个String数组;ListSubItems是一个集合。 
     属性 
    View:设置ListView的外观 
    Sorted:设置ListView中的对象集合是否排序。 
    SortKey:设置以第几项排序。从零开始。 
    SelectedItem:返回选中的对象的引用。 
     事件 
    AfterLabelEdit:编辑ListItem对象的标签时被触发。 
    BeforeLabelEdit:编辑ListItem对象的标签后出发。 
    ColumnClick:单击列标题时触发。参数中可以获得被单击的列对象。通常用于排序。 
    ItemClick:单击某行或某ListItem时触发。参数中可以获得被单击的ListItem对象。 
     方法 
    FindItem:搜索ListItem对象。 
    参数: 
    string:搜索字符串。 
    value:在ListItem的哪部分中搜索(LvwText、LvwSubItem、LvwTag);index:开始搜索的位置。 
    match:匹配方式。 
    HitTest:检索位于特定坐标处的ListItem对象。 
    ListView控件比前面几种控件要复杂一些,通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本。ListView控件是由ColumnHeader和ListItem对象所组成的,其中ColumnHeader对象的个数决定了控件的列数,而ListItem对象的个数则决定了控件的行数。(图7) 
    ColumnHeader对象是ListView控件中包含标头文字的项目。利用ColumnHeader对象,用户可以: 
    ▲单击对象触发ColumnClick事件并根据数据项目将项目排序。 
    ▲拖动对象的右边框来调整列宽度。 
    ▲在报表视图中隐藏ColumnHeader对象。 
    ColumnHeader对象的数目决定每个ListItem对象可包含的子项目数目。删除ColumnHeader对象后所有与列关联的子项目也将被删除,并且每个ListItem对象的子项目数组将平移以更新ColumnHeader的索引,而这将导致剩余的列标头SubItemIndex属性的改变。  ColumnHeader对象的SubItemIndex属性 
    该属性返回与ListView控件中ColumnHeader对象关联的子项目的索引。子项目是字符串数组,代表显示在报表视图中的ListItem对象的数据。第一列的列标头SubItemIndex属性设置为0,这是因为小图标和ListItem对象的文字总出现在第一列中,而且它们被当作ListItem对象而不是子项目。列标头数目取决于子项目数目。列标头数目总是比子项目数目多1。 
    在设计时可以利用属性页的“列首”选项卡将ColumnHeader对象添加到ListView控件中,在运行时则用Add方法添加。 
     
    ColumnHeader对象的Add方法 
    该方法的使用与前面那些控件基本相似,就不再介绍了。 
    ListView1.ColumnHeader.Add(index,key,text,width,alignment) 
    ListItem对象是指控件中的一行(不包含标头行)的所有内容。它也可包含文本和图片,但是要使用图片则必须通过Icons和SmallIcons属性引用ImageList控件。 
     
    ListItem对象的SubItems属性 
    返回或设置一个字符串(子项目)数组,它代表ListView控件中ListItem对象的数据。 
    ListItem对象可包含任意多个的关联项目数据字符串(子项目),但每个ListItem对象子项目数目必须相同。每个子项目都对应于相关的列标头,无法直接向子项目数组添加元素,只有通过ColumnHeaders的Add方法添加列标头的方法来添加子项目。 
     
    ListItem对象的Add方法 
    该方法添加ListItem对象到ListView控件的ListItems集合中并返回对新创建对象的引用。 
    它的语法如下: 
     
    ListItem1.Add(index,key,text,icon,smallIcon) 
     
    ListView控件的View属性 
    ListView控件可使用四种不同视图显示项目,这可以用View属性来确定。该属性返回或设置ListView控件中ListItem对象的外观。 
    ListView控件的SortOrder,SortKey和Sorted属性 
    控件中的ListItem对象可以按要求进行排序,与排序有关的属性是SortOrder,Sorted和SortKey属性。 
    SortOrder属性返回或设置一个值,此值决定ListView控件中的ListItem对象以升序或降序排序。 
    SortKey属性返回或设置一个值,此值决定ListView控件中的ListItem对象如何排序。 
    Sorted属性返回或设置确定ListView控件中的ListItem对象是否排序的值。 
    下面的代码说明了如何创建ColumnHeaders和ListItem对象,SubItemIndex和SubItem属性的使用方法以及如何排序。 
     
    Private Sub Form_load() 
    '确保ListView控件的view属性为报表视图。 
    ListView1.View=lvwReport 
    '添加三列。 
    ListView1.ColumnHeaders.Add,"Name","姓名" 
    ListView1.ColumnHeaders.Add,"Sex","性别" 
    ListView1.ColumnHeaders.Add,"Age","年龄" 
    '向控件添加ListItem对象。 
    Dim itmX As ListItem 
    '添加column1的名称。 
    Set itmX=ListView1.ListItems.Add(1,"ZL","张力") 
    '使用SubItemIndex将SubItem与正确的ColumnHeader关联。使用关键字("Sex")指定正确的ColumnHeader。 
    itmX.SubItems(ListView1.ColumnHeaders("Sex").SubItemIndex)="男" 
    '使用ColumnHeader关键字将SubItems字符串与 
    '正确的ColumnHeader关联。 
    itmX.SubItems(ListView1.ColumnHeaders("Age").SubItemIndex)="19" 
    Set itmX=ListView1.ListItems.Add(1,"LF","李芳") 
    itmX.SubItems(ListView1.ColumnHeaders("Sex").SubItemIndex)="男" 
    itmX.SubItems(ListView1.ColumnHeaders("Age").SubItemIndex)="22" 
    Set itmX=ListView1.ListItems.Add(1,"WW","王伟") 
    itmX.SubItems(ListView1.ColumnHeaders("Sex").SubItemIndex)="男" 
    itmX.SubItems(ListView1.ColumnHeaders("Age").SubItemIndex)="24" 
    End Sub 
     
    Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ComctlLib.ColumnHeader) 
    Select Case ColumnHeader.Key 
    Case "Sex":ListView1.SortKey=1 
    ListView1.SortOrder=lvwAscending 
    ListView1.Sorted=True 
    Case "Age":ListView1.SortKey=2 
    ListView1.SortOrder=lvwAscending 
    ListView1.Sorted=True 
    End Select 
    End Sub 
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lgb571/archive/2006/05/28/758379.aspx