ListView的使用

本文介绍如何使用ListView控件展示文件夹及文件信息,并通过切换不同的查看模式改变ListView的显示方式,包括大图标、小图标、详细信息等。此外,文章还讲解了如何实现文件夹的打开、文件的启动及后退功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
   }
   }
  好了,现在所有的功能都实现了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值