百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

63.C# ListView控件 c#listview控件用法

xsobi 2024-12-20 19:26 1 浏览

摘要


Windows 窗体 ListView 控件显示带图标的项列表。 你可以使用列表视图创建类似 Windows 资源管理器右窗格的用户界面。 该控件有四种视图模式:LargeIcon、SmallIcon、List 和 Details。

正文


属性


CheckBoxes

获取或设置一个值,该值指示控件中各项的旁边是否显示复选框。

CheckedIndices

获取控件中当前选中项的索引。

CheckedItems

获取控件中当前选中的项。

Columns

获取控件中显示的所有列标题的集合。

FullRowSelect

获取或设置一个值,该值指示单击某项是否选择其所有子项。

GridLines

获取或设置一个值,该值指示:在包含控件中项及其子项的行和列之间是否显示网格线。

GroupImageList

当前设置 GroupIcon 映像列表。

Groups

获取分配给控件的 ListViewGroup 对象的集合。

Items

获取包含控件中所有项的集合。

LabelEdit

获取或设置一个值,该值指示用户是否可以编辑控件中项的标签。

LabelWrap

获取或设置一个值,该值指示当项作为图标在控件中显示时,项标签是否换行。

SelectedItems

获取在控件中选定的项。

ShowGroups

获取或设置一个值,该值指示是否以分组方式显示项。

ShowItemToolTips

获取或设置一个值,该值指示是否为 ListViewItem 中包含的 ListView 对象显示工具提示。

SmallImageList

获取或设置 ImageList,当项在控件中显示为小图标时使用。

Sorting

获取或设置控件中项的排序顺序。

StateImageList

获取或设置与控件中应用程序定义的状态相关的 ImageList。

SmallImageList

获取或设置 ImageList,当项在控件中显示为小图标时使用。

Sorting

获取或设置控件中项的排序顺序。

StateImageList

获取或设置与控件中应用程序定义的状态相关的 ImageList。

LargeIcon 模式在项文本旁边显示大图标;如果控件足够大,项将出现在多列中。

SmallIcon 模式是相同的,只是它显示的是小图标。

List 模式显示小图标,但始终位于单列中。

Details 模式在多列中显示项。

常用Detials设置

lstDetail.View = View.Details;//设置视图

添加列

//添加列
lstDetail.Columns.Add("设备号", 120, HorizontalAlignment.Left);
lstDetail.Columns.Add("设备名称", 150, HorizontalAlignment.Left);
lstDetail.Columns.Add("当前状态", 150, HorizontalAlignment.Left);
lstDetail.Columns.Add("运行时长", 200, HorizontalAlignment.Left);

添加行

//添加行
var item = new ListViewItem();
item.Text = "A0001";//设备号
item.SubItems.Add("S7-1200"); //设备名称
item.SubItems.Add("RUN"); //当前状态
item.SubItems.Add("500"); //运行时长

//在批量载入时,尽量使用BeginUpdate,EndUpdate,减少刷新
lstDetail.BeginUpdate();
lstDetail.Items.Add(item);
lstDetail.Items[lstDetail.Items.Count - 1].EnsureVisible();//滚动到最后
lstDetail.EndUpdate();

给Detail添加图标

ImageList控件(存储图像控件)用于存储图像资源,然后在控件上显示出来,这样就简化了对图像的管理。ImageList 控件的主要属性是 Images,它包含关联控件将要使用的图片。每个单独的图像可通过其索引值或其键值来访问。

添加图片

lstDetail.SmallImageList = simgs;//给listview 绑定小图标列表
item.ImageIndex = 0;//指定对应的图标,用索引

给列表增加勾选框

lstDetail.CheckBoxes = true;
lstDetail.FullRowSelect = true;//整行选中
//添加行
lstDetail.BeginUpdate();
for (int i = 0; i < 100; i++)
{
    var item = new ListViewItem();
    item.Text = "A000"+i.ToString();//设备号
    item.SubItems.Add("S7-1200"); //设备名称
    item.SubItems.Add("RUN"); //当前状态
    item.SubItems.Add(new Random().Next(0,1000).ToString()); //运行时长
    item.ImageIndex = 0;//指定对应的图标,用索引
    lstDetail.Items.Add(item);
}
lstDetail.EndUpdate();
private void btnGetSelected_Click(object sender, EventArgs e)
{
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < lstDetail.Items.Count; i++)
    {
        if (lstDetail.Items[i].Checked)
        {
            sb.AppendLine(lstDetail.Items[i].Text);
        }
    }
    MessageBox.Show(sb.ToString());
}

StringBuilder sb = new StringBuilder();
foreach (ListViewItem item in lstDetail.CheckedItems)
{
    sb.AppendLine(item.Text);    
}
MessageBox.Show(sb.ToString());

列头排序

public class ListViewItemComparer : IComparer
{
    /// <summary>
    /// 指定按照哪个列排序
    /// </summary>
    private int ColumnToSort;
    /// <summary>
    /// 指定排序的方式
    /// </summary>
    private System.Windows.Forms.SortOrder OrderOfSort;
    /// <summary>
    /// 声明CaseInsensitiveComparer类对象
    /// </summary>
    private System.Collections.CaseInsensitiveComparer ObjectCompare;
    /// <summary>
    /// 构造函数
    /// </summary>
    public ListViewItemComparer()
    {
        // 默认按第一列排序
        ColumnToSort = 0;
        // 排序方式为不排序
        OrderOfSort = System.Windows.Forms.SortOrder.None;
        // 初始化CaseInsensitiveComparer类对象
        ObjectCompare = new System.Collections.CaseInsensitiveComparer();
    }
    /// <summary>
    /// 重写IComparer接口.
    /// </summary>
    /// <param name="x">要比较的第一个对象</param>
    /// <param name="y">要比较的第二个对象</param>
    /// <returns>比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>
    public int Compare(object x, object y)
    {
        int compareResult;
        System.Windows.Forms.ListViewItem listviewX, listviewY;
        // 将比较对象转换为ListViewItem对象
        listviewX = (System.Windows.Forms.ListViewItem)x;
        listviewY = (System.Windows.Forms.ListViewItem)y;
        string xText = listviewX.SubItems[ColumnToSort].Text;
        string yText = listviewY.SubItems[ColumnToSort].Text;
        int xInt, yInt;

        if (int.TryParse(xText, out xInt) && int.TryParse(yText, out yInt)) //是否全为数字
        {
            //比较数字
            compareResult = CompareInt(xInt, yInt);
        }
        else
        {
            //比较对象
            compareResult = ObjectCompare.Compare(xText, yText);
        }
        // 根据上面的比较结果返回正确的比较结果
        if (OrderOfSort == System.Windows.Forms.SortOrder.Ascending)
        {
            // 因为是正序排序,所以直接返回结果
            return compareResult;
        }
        else if (OrderOfSort == System.Windows.Forms.SortOrder.Descending)
        {
            // 如果是反序排序,所以要取负值再返回
            return (-compareResult);
        }
        else
        {
            // 如果相等返回0
            return 0;
        }
    }
    /// <summary>
    /// 比较两个数字的大小
    /// </summary>
    /// <param name="ipx">要比较的第一个对象</param>
    /// <param name="ipy">要比较的第二个对象</param>
    /// <returns>比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>
    private int CompareInt(int x, int y)
    {
        if (x > y)
        {
            return 1;
        }
        else if (x < y)
        {
            return -1;
        }
        else
        {
            return 0;
        }
    }
    /// <summary>
    /// <summary>
    /// 获取或设置按照哪一列排序.
    /// </summary>
    public int SortColumn
    {
        set
        {
            ColumnToSort = value;
        }
        get
        {
            return ColumnToSort;
        }
    }
    /// <summary>
    /// 获取或设置排序方式.
    /// </summary>
    public System.Windows.Forms.SortOrder Order
    {
        set
        {
            OrderOfSort = value;
        }
        get
        {
            return OrderOfSort;
        }
    }
 }
private void lstDetail_ColumnClick(object sender, ColumnClickEventArgs e)
{
    if(e.Column== comparer.SortColumn)
    {
        if (comparer.Order == SortOrder.Ascending)
        {
            comparer.Order = SortOrder.Descending;
        }
        else
        {
            comparer.Order = SortOrder.Ascending;
        }
    }
    else
    {
        comparer.SortColumn = e.Column;
        comparer.Order = SortOrder.Ascending;
    }
    lstDetail.Sort();
}
ListViewItemComparer comparer=new ListViewItemComparer();
public FrmMain()
{
    InitializeComponent();
    lstDetail.ListViewItemSorter = comparer;
}

相关推荐

js向对象中添加元素(对象,数组) js对象里面添加元素

一、添加一个元素对象名["属性名"]=值(值:可以是一个值,可以是一个对象,也可以是一个数组)这样添加进去的元素,就是一个值或对象或数组...

JS小技巧,如何去重对象数组?(一)

大家好,关于数组对象去重的业务场景,想必大家都遇到过类似的需求吧,这对这样的需求你是怎么做的呢。下面我就先和大家分享下如果是基于对象的1个属性是怎么去重实现的。方法一:使用.filter()和....

「C/C++」之数组、vector对象和array对象的比较

数组学习过C语言的,对数组应该都不会陌生,于是这里就不再对数组进行展开介绍。模板类vector模板类vector类似于string,也是一种动态数组。能够在运行阶段设置vector对象的长度,可以在末...

如何用sessionStorage保存对象和数组

背景:在工作中,我将[{},{}]对象数组形式,存储到sessionStorage,然后ta变成了我看不懂的形式,然后我想取之用之,发现不可能了~记录这次深刻的教训。$clickCouponIndex...

JavaScript Array 对象 javascript的array对象

Array对象Array对象用于在变量中存储多个值:varcars=["Saab","Volvo","BMW"];第一个数组元素的索引值为0,第二个索引值为1,以此类推。更多有...

JavaScript中的数组Array(对象) js array数组

1:数组Array:-数组也是一个对象-数组也是用来存储数据的-和object不同,数组中可以存储一组有序的数据,-数组中存储的数据我们称其为元素(element)-数组中的每一个元素都有一...

数组和对象方法&amp;数组去重 数组去重的5种方法前端

列举一下JavaScript数组和对象有哪些原生方法?数组:arr.concat(arr1,arr2,arrn);--合并两个或多个数组。此方法不会修改原有数组,而是返回一个新数组...

C++ 类如何定义对象数组?初始化数组?linux C++第43讲

对象数组学过C语言的读者对数组的概念应该很熟悉了。数组的元素可以是int类型的变量,例如int...

ElasticSearch第六篇:复合数据类型-数组,对象

在ElasticSearch中,使用JSON结构来存储数据,一个Key/Value对是JSON的一个字段,而Value可以是基础数据类型,也可以是数组,文档(也叫对象),或文档数组,因此,每个JSON...

第58条:区分数组对象和类数组对象

示例设想有两个不同类的API。第一个是位向量:有序的位集合varbits=newBitVector;bits.enable(4);bits.enable([1,3,8,17]);b...

八皇后问题解法(Common Lisp实现)

如何才能在一张国际象棋的棋盘上摆上八个皇后而不致使她们互相威胁呢?这个著名的问题可以方便地通过一种树搜索方法来解决。首先,我们需要写一个函数来判断棋盘上的两个皇后是否互相威协。在国际象棋中,皇后可以沿...

visual lisp修改颜色的模板函数 怎么更改visual studio的配色

(defunBF-yansemokuai(tuyuanyanse/ss)...

用中望CAD加载LISP程序技巧 中望cad2015怎么加载燕秀

1、首先请加载lisp程序,加载方法如下:在菜单栏选择工具——加载应用程序——添加,选择lisp程序然后加载,然后选择添加到启动组。2、然后是添加自定义栏以及图标,方法如下(以...

图的深度优先搜索和广度优先搜索(Common Lisp实现)

为了便于描述,本文中的图指的是下图所示的无向图。搜索指:搜索从S到F的一条路径。若存在,则以表的形式返回路径;若不存在,则返回nil。...

两个有助于理解Common Lisp宏的例子

在Lisp中,函数和数据具有相同的形式。这是Lisp语言的一个重大特色。一个Lisp函数可以分析另一个Lisp函数;甚至可以和另一个Lisp函数组成一个整体,并加以利用。Lisp的宏,是实现上述特色的...