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

63.C# ListView控件

liuian 2024-12-10 18:06 23 浏览

摘要


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;
}

相关推荐

Optional是个好东西,如果用错了就太可惜了

原文出处:https://xie.infoq.cn/article/e3d1f0f4f095397c44812a5be我们都知道,在Java8新增了一个类-Optional,主要是用来解决程...

IDEA建议:不要在字段上使用@Autowire了!

在使用IDEA写Spring相关的项目的时候,在字段上使用@Autowired注解时,总是会有一个波浪线提示:Fieldinjectionisnotrecommended.纳尼?我天天用,咋...

Spring源码|Spring实例Bean的方法

Spring实例Bean的方法,在AbstractAutowireCapableBeanFactory中的protectedBeanWrappercreateBeanInstance(String...

Spring技巧:深入研究Java 14和SpringBoot

在本期文章中,我们将介绍Java14中的新特性及其在构建基于SpringBoot的应用程序中的应用。开始,我们需要使用Java的最新版本,也是最棒的版本,Java14,它现在还没有发布。预计将于2...

Java开发200+个学习知识路线-史上最全(框架篇)

1.Spring框架深入SpringIOC容器:BeanFactory与ApplicationContextBean生命周期:实例化、属性填充、初始化、销毁依赖注入方式:构造器注入、Setter注...

年末将至,Java 开发者必须了解的 15 个Java 顶级开源项目

专注于Java领域优质技术,欢迎关注作者:SnailClimbStar的数量统计于2019-12-29。1.JavaGuideGuide哥大三开始维护的,目前算是纯Java类型项目中Sta...

字节跨平台框架 Lynx 开源:一个 Web 开发者的原生体验

最近各大厂都在开源自己的跨平台框架,前脚腾讯刚宣布计划四月开源基于Kotlin的跨平台框架「Kuikly」,后脚字节跳动旧开源了他们的跨平台框架「Lynx」,如果说Kuikly是一个面向...

我要狠狠的反驳“公司禁止使用Lombok”的观点

经常在其它各个地方在说公司禁止使用Lombok,我一直不明白为什么不让用,今天看到一篇文章列举了一下“缺点”,这里我只想狠狠地反驳,看到列举的理由我竟无言以对。原文如下:下面,结合我自己使用Lomb...

SpringBoot Lombok使用详解:从入门到精通(注解最全)

一、Lombok概述与基础使用1.1Lombok是什么Lombok是一个Java库,它通过注解的方式自动生成Java代码(如getter、setter、toString等),从而减少样板代码的编写,...

Java 8之后的那些新特性(六):记录类 Record Class

Java是一门面向对象的语言,而对于面向对象的语言中,一个众所周知的概念就是,对象是包含属性与行为的。比如HR系统中都会有雇员的概念,那雇员会有姓名,ID身份,性别等,这些我们称之为属性;而雇员同时肯...

为什么大厂要求安卓开发者掌握Kotlin和Jetpack?优雅草卓伊凡

为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡一、Kotlin:Android开发的现代语言选择1.1Kotlin是什么?Kotlin是由...

Kotlin这5招太绝了!码农秒变优雅艺术家!

Kotlin因其简洁性、空安全性和与Java的无缝互操作性而备受喜爱。虽然许多开发者熟悉协程、扩展函数和数据类等特性,但还有一些鲜为人知的特性可以让你的代码从仅仅能用变得真正优雅且异常简洁。让我们来看...

自行部署一款免费高颜值的IT资产管理系统-咖啡壶chemex

在运维时,ICT资产太多怎么办,还是用excel表格来管理?效率太低,也不好多人使用。在几个IT资产管理系统中选择比较中,最终在Snipe-IT和chemex间选择了chemex咖啡壶。Snip...

PHP对接百度语音识别技术(php对接百度语音识别技术实验报告)

引言在目前的各种应用场景中,语音识别技术已经越来越常用,并且其应用场景正在不断扩大。百度提供的语音识别服务允许用户通过简单的接口调用,将语音内容转换为文本。本文将通过PHP语言集成百度的语音识别服务,...

知识付费系统功能全解析(知识付费项目怎么样)

开发知识付费系统需包含核心功能模块,确保内容变现、用户体验及运营管理需求。以下是完整功能架构:一、用户端功能注册登录:手机号/邮箱注册,第三方登录(微信、QQ)内容浏览:分类展示课程、文章、音频等付费...