WinForm 中 ListView 控件的实战应用与功能拓展

目录

一、初始化与列设置

二、右键菜单实现数据删除

三、视图切换(大图标、小图标、详情)

四、数据查找与高亮

五、数据修改(查找并替换)

六、数据添加

效果展示


在 WinForm 开发里,ListView 控件是用于展示列表数据并支持丰富视图交互的重要工具。它能以多种视图形式呈现数据,还可结合右键菜单、按钮等实现数据的增删改查及视图切换。下面结合实际代码,详细介绍 ListView 在项目中的典型用法。

一、初始化与列设置

cs 复制代码
public Form1()
{
    InitializeComponent();
    // 通过代码添加列
    ColumnHeader c = new ColumnHeader();
    c.Text = "地址";
    // 添加列
    listView1.Columns.Add(c);
}

功能解析

在窗体的构造函数中,我们对 ListView 控件 listView1 进行初始化。通过创建 ColumnHeader 对象并设置其 Text 属性(这里为 "地址" ),再调用 listView1.Columns.Add(c) 方法,为 ListView 添加了一列。这一步是构建 ListView 表格形式展示数据的基础,后续可在列中填充具体数据,比如文件路径、信息分类等内容,让数据展示更有条理 。

二、右键菜单实现数据删除

cs 复制代码
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
    foreach (ListViewItem item in listView1.SelectedItems) 
    {
        listView1.Items.Remove(item);    
    } 
}

功能解析

这里为右键菜单中的 "删除" 菜单项(删除ToolStripMenuItem )绑定了点击事件。当用户在 ListView 中选中一个或多个项(SelectedItems )后,点击 "删除" 菜单,通过 foreach 循环遍历选中的 ListViewItem ,调用 listView1.Items.Remove(item) 方法将选中项从 ListView 中移除。这样就实现了便捷的数据删除操作,用户能直观地通过右键菜单管理 ListView 中的数据。

三、视图切换(大图标、小图标、详情)

cs 复制代码
private void 大图标ToolStripMenuItem_Click(object sender, EventArgs e)
{
    listView1.View = View.LargeIcon;
}

private void 小图标ToolStripMenuItem_Click(object sender, EventArgs e)
{
    listView1.View = View.SmallIcon ;
}

private void 详情ToolStripMenuItem_Click(object sender, EventArgs e)
{
    listView1.View = View.Details;
}

功能解析

为右键菜单里分别对应大图标、小图标、详情视图的菜单项绑定点击事件:

  • 点击 "大图标 ToolStripMenuItem" 时,设置 listView1.View = View.LargeIconListView 会以大图标形式展示数据项,每个项显示较大的图标和文字,适合需要突出显示项目图标的场景,比如图片浏览的缩略图展示(虽示例未涉及图片关联,但原理相通 )。
  • 点击 "小图标 ToolStripMenuItem" ,listView1.View = View.SmallIcon ,切换为小图标视图,图标变小,可在有限空间展示更多项目。
  • 点击 "详情 ToolStripMenuItem" ,listView1.View = View.Details ,以详细列表(表格)形式展示数据,能清晰呈现多列数据,方便查看每条数据的具体字段内容,像示例中若有多列,就可展示不同类别的信息,如类型、路径、文件等对应列的数据。

四、数据查找与高亮

cs 复制代码
 private void button4_Click(object sender, EventArgs e)
 {
     //查找功能
     for (int i = 0; i < listView1.Items.Count; i++)
     {
         //作用: 用来获取列表视图中每一项的子项
         for (int j = 0; j < listView1.Items[i].SubItems.Count; j++)
         {
             //判断列表中所有的子项是否与查找的文本一致
             if (listView1.Items[i].SubItems[j].Text == textBox1.Text)
             {
                 //如果找到 更改下颜色
                 //根据子项的内容 找到本项所有内容
                 listView1.Items[i].SubItems[j].ForeColor = Color.Red;
             }

         }
     }
 }

功能解析

当点击 button4 (假设是 "查找" 功能按钮 )时,通过两层 for 循环遍历 ListView 的所有项(Items )及其子项(SubItems )。外层循环 for (int i = 0; i < listView1.Items.Count; i++) 遍历 ListView 的每一项,内层循环 for (int j = 0; j < listView1.Items[i].SubItems.Count; j++) 遍历当前项的每个子项。然后判断子项的文本(SubItems[j].Text )是否与文本框 textBox1 中输入的内容(要查找的内容)一致,若一致,就将该子项的文字颜色(ForeColor )设置为红色,实现查找内容的高亮显示,方便用户快速定位到目标数据。

五、数据修改(查找并替换)

cs 复制代码
private void button6_Click(object sender, EventArgs e)
{
    for (int i = 0; i < listView1.Items.Count; i++)
    {
        for (int j = 0; j < listView1.Items[i].SubItems.Count; j++)
        {
            //判断列表中所有的子项是否与查找的文本一致
            if (listView1.Items[i].SubItems[j].Text == textBox1.Text)
            {
                listView1.Items[i].SubItems[j].ForeColor = Color.Red;
                string[] str = textBox2.Text.Split(',');
                //更改
                //找到符合查询数据的项的子项的具体内容
                listView1.Items[i].SubItems[j].Text = str[i];
            }

        }
    }
}

功能解析

点击 button6 (假设是 "修改" 功能按钮 )时,同样利用两层 for 循环遍历 ListView 的项和子项。在找到与 textBox1 文本(要查找的内容)匹配的子项后,先将其文字颜色设置为红色(高亮显示找到的内容 ),接着通过 listView1.Items[i].SubItems[j].Text = textBox2.Text 代码,把该子项的文本替换为 textBox2 中的内容(要修改后的内容),实现了数据的查找替换功能,可用于更新 ListView 中展示的信息,比如修改文件描述、路径等内容 。

六、数据添加

cs 复制代码
private void button7_Click(object sender, EventArgs e)
{
    string[] str = textBox3.Text.Split(',');
    // 创建项
    ListViewItem item = new ListViewItem();
    item.Text = str[0];
    item.ImageIndex = 0;
    // 向子项添加内容
    item.SubItems.Add(str[1]);
    item.SubItems.Add(str[2]);
    item.SubItems.Add(str[3]);

    item.Font = new Font("楷体", 13.8f);
    listView1.Items.Add(item);
}

功能解析

点击 button7 (假设是 "添加" 功能按钮 )时,先通过 textBox3.Text.Split(',') 方法,以中文逗号 "," 为分隔符,将 textBox3 中的文本分割成字符串数组 str 。然后创建 ListViewItem 对象 item ,设置其 Text 属性为 str[0](数组第一个元素,作为该项的主文本 ),并为其指定 ImageIndex(这里设为 0,需提前在 ImageList 中配置对应索引的图片 )。接着通过 item.SubItems.Add(str[1]) 等方法,依次为子项添加内容。还可设置 item.Font 来定义该项文字的字体样式,最后调用 listView1.Items.Add(item) 将创建好并填充了数据的 ListViewItem 添加到 ListView 中,实现数据的新增,比如添加新的文件信息、分类数据等到 ListView 展示列表里。

通过以上对 ListView 控件结合右键菜单、按钮等实现的增删改查及视图切换功能的介绍,能看出 ListView 在 WinForm 中可灵活构建具备丰富交互的数据展示模块,满足多样化的业务需求,无论是文件管理类界面,还是信息列表展示界面,都能很好地适配并提升用户操作体验 。

扩展资源

  • ImageList :与 ListView 配合使用,用于管理图标资源(如大图标 / 小图标视图中的图片),可在设计时导入图片并关联到 ListViewSmallImageListLargeImageList 属性。
  • ContextMenuStrip :右键菜单控件,用于实现 ListView 的右键操作(如示例中的删除、视图切换),可在设计时可视化配置菜单项。

在本设计中,将菜单右键事件同时添加到按键的点击事件中,使按键点击时也可以实现。

在按键属性中选择:

效果展示

按键

右键菜单

先查找再修改

推荐一个好用的图表网址,可以配置ImageList库:

阿里巴巴图标库https://www.iconfont.cn/

相关推荐
啊森要自信15 分钟前
【QT】常⽤控件详解(六)多元素控件 QListWidget && Table Widget && Tree Widget
c语言·开发语言·c++·qt
屁股割了还要学24 分钟前
【数据结构入门】栈和队列
c语言·开发语言·数据结构·学习·算法·青少年编程
z樾37 分钟前
MATLAB核心技巧:从入门到精通
开发语言·matlab
暗流者1 小时前
信息安全简要
开发语言·网络·php
绕灵儿3 小时前
C++ 部署LSTM(.onnx)
开发语言·c++·lstm
ankleless3 小时前
C语言(10)——结构体、联合体、枚举
c语言·开发语言·零基础·枚举·结构体·联合体·自学
七月稻草人3 小时前
飞算JavaAI:人工智能与Java的创新融合与应用前景
开发语言·人工智能·ai编程·java开发·飞算javaai炫技赛
励志成为糕手4 小时前
从反射到方法句柄:深入探索Java动态编程的终极解决方案
java·开发语言
R-G-B4 小时前
【30】C#实战篇——获取路径下的文件名(不包含路径和扩展名),文件名由连续的数字编号+连续的字母编号组成,并分离出文件名数字部分和英文部分
c#·获取路径下的文件名·不包含路径·去除扩展名·分离出文件名数字和英文部分·连续的数字编号·连续的字母编号