C# ListView的使用

本文记录下windows中最常用的ListView控件的使用:


列表视图通常是为了显示数据,以行或者列的形式显示内容。它可以有几种不同的模式显示,如Details模式,Tile模式。如下图所示:


ListView具有以下几种模式:

         1、LargeIcon:每个项都显示为一个最大化图标,在它的下面有一个标签

         2、SmallIcon:每个项都显示为一个小图标,在它的右边带一个标签

         3、List:每个项都显示为一个小图标,在它的右边带一个标签。各项排列在列中,没有列标头

         4、Details:可以显示任意的列,但只有第一列可以包含一个小图标和标签,其它的列项只能显示文字信息,有列表头。

         5、Tile:每个项都显示为一个完整大小的图标,在它的右边带项标签和子项信息。

大家可以在我的电脑中切换模式看下区别,下文也会展示出来。


列表视图中的选项总是ListViewItem类的一个实例,它包含了要显示的信息,如文本和图标的索引。ListViewItems对象有一个SubItems属性,其中包含了另外一个类ListViewSubItem的实例。当ListView控件处于Details或Title模式下,这些子选项就会显示出来。每个子选项表示列表视图中的一列(不是一行)。子选项不能显示图标,主选项是可以显示图标的。


下面代码展示一下:

我们首先做一个简单的效果,做一个类似硬盘文件显示信息那种(如下图)。列表内容由代码添加。



先添加一个ListView控件,名字为listViewtest,然后修改代码,代码如下:

 public Form1()
        {
            InitializeComponent();
            ListViewSet();//设置显示模式
            CreateViewItemMethodOne();
        }
        //ListView设置
        private void ListViewSet()
        {
            //设置ListView的显示方式为details
            listViewtest.View = View.Details;
        }
        //代码添加显示项
        private void CreateViewItemMethodOne()
        {
            listViewtest.BeginUpdate();
            //create the title
            //the first method to add item property 
            listViewtest.Columns.Add("姓名");
            listViewtest.Columns.Add("年龄");
            listViewtest.Columns.Add("家庭地址");
            //name1 就好像第一行的一个标记,
            listViewtest.Items.Add("name1", "张3", 0);
            listViewtest.Items["name1"].SubItems.Add("18");
            listViewtest.Items["name1"].SubItems.Add("呵呵县哈哈镇");

            listViewtest.Items.Add("name2", "李4", 0);
            listViewtest.Items["name2"].SubItems.Add("19");
            listViewtest.Items["name2"].SubItems.Add("哈哈县嘿嘿镇");

            listViewtest.Items.Add("name3", "王5", 0);
            listViewtest.Items["name3"].SubItems.Add("20");
            listViewtest.Items["name3"].SubItems.Add("嘿嘿县呵呵乡");

	    // 声明ListViewItem 和ListViewSubItem实例,并且设置实例属性,然后添加到实例对象中
            ListViewItem lvItem;
            ListViewItem.ListViewSubItem lvSubItem;

            lvItem = new ListViewItem();
            lvItem.Text = "陈7";
            //此句结束,则可以显示到桌面上上了
            listViewtest.Items.Add(lvItem);

            //实例化SubItem
            lvSubItem = new ListViewItem.ListViewSubItem();
            lvSubItem.Text = "18";
            lvItem.SubItems.Add(lvSubItem);
            lvSubItem = new ListViewItem.ListViewSubItem();//这里要另外new一个对象,否则后边设置的内容会覆盖到前面内容
            lvSubItem.Text = "slgjlsgj";
            lvItem.SubItems.Add(lvSubItem);

            lvItem = new ListViewItem();
            lvItem.Text = "钱10";
            listViewtest.Items.Add(lvItem);

            //实例化SubItem
            lvSubItem = new ListViewItem.ListViewSubItem();
            lvSubItem.Text = "20";
            lvItem.SubItems.Add(lvSubItem);
            lvSubItem = new ListViewItem.ListViewSubItem();
            lvSubItem.Text = "哈哈呵呵嘻嘻";
            lvItem.SubItems.Add(lvSubItem);
       	    listViewtest.EndUpdate();
        }
效果如下图:


可以看到有两种方式添加列表的内容。


下面我们一步一步分析下,创建ListView的过程,

1.创建表头

//创建列表头的两种方式

            //1 创建列表头对象实例,设置实例属性,并且添加到ListView中
            ColumnHeader colHeader= new ColumnHeader();
            colHeader.Text = "列标题";
            colHeader.Width = 120;//width
            colHeader.TextAlign = HorizontalAlignment.Right;
            this.listViewtest.Columns.Add(colHeader);

            //2.  直接在ListView中添加头对象
            this.listViewtest.Columns.Add("列标题2", 120, HorizontalAlignment.Left);
            


2.添加内容

listViewtest.Items.Add("name3", "王5", 0);
            listViewtest.Items["name3"].SubItems.Add("20");
            listViewtest.Items["name3"].SubItems.Add("嘿嘿县呵呵乡");

	    // 声明ListViewItem 和ListViewSubItem实例,并且设置实例属性,然后添加到实例对象中
            ListViewItem lvItem;
            ListViewItem.ListViewSubItem lvSubItem;

            lvItem = new ListViewItem();
            lvItem.Text = "陈7";
            //此句结束,则可以显示到桌面上上了
            listViewtest.Items.Add(lvItem);

            //实例化SubItem
            lvSubItem = new ListViewItem.ListViewSubItem();
            lvSubItem.Text = "18";
            lvItem.SubItems.Add(lvSubItem);
            lvSubItem = new ListViewItem.ListViewSubItem();//这里要另外new一个对象,否则后边设置的内容会覆盖到前面内容
            lvSubItem.Text = "slgjlsgj";
            lvItem.SubItems.Add(lvSubItem);



3.使用icon模式

smalllcon模式:

首先添加一个imagelist控件,选择添加图片(choose images),如下如所示:



然后添加图片,注意到图片旁边都会有标号,可以在代码中直接使用标号。


OK,下面修改代码

 listViewtest.SmallImageList = imageList1;
 lvi.ImageIndex = i;     //通过与imageList绑定,显示imageList中第i项图标  
这里模式仍然是Details, 看下显示效果



然后我们可以修改下模式,将模式改为smalllcon模式,

this.listViewtest.View = View.SmallIcon;
其余代码不变,看下运行效果


可以看出来,在Details模式下,才会有列标头,
整个代码如下:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            ListViewSet();//设置显示模式  
            CreateViewItemMethodOne();

        }
        private void ListViewSet()
        {
            this.listViewtest.View = View.SmallIcon;
        }
        private void CreateViewItemMethodOne()
        {

            ColumnHeader colHeader = new ColumnHeader();
            colHeader.Text = "列标题1";   //设置列标题      
            this.listViewtest.Columns.Add(colHeader);    //将列头添加到ListView控件。  

            this.listViewtest.Columns.Add("列标题2" );
            this.listViewtest.Columns.Add("列标题3" );

            
            this.listViewtest.BeginUpdate();
            
            for (int i = 0; i < 9; i++)   //添加10行数据  
            {
                ListViewItem lvi = new ListViewItem();
                listViewtest.SmallImageList = imageList1;

                lvi.ImageIndex = i;     //通过与imageList绑定,显示imageList中第i项图标  

                lvi.Text = "subitem" + i;

                lvi.SubItems.Add("第2列,第" + i + "行");

                lvi.SubItems.Add("第3列,第" + i + "行");

                this.listViewtest.Items.Add(lvi);
            }

            this.listViewtest.EndUpdate();  //结束数据处理,UI界面一次性绘制。  
        }

Largelcon模式:

关键代码修改:

this.listViewtest.View = View.LargeIcon;
listViewtest.LargeImageList = imageList2;//这里imageList2是 32*32版本的


运行结果:




可以看到,标签在图片下方,正好验证了我们开篇的关于各种模式的一些区别中提到的区别。这里也没有列标头。、



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值