平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“C#中WinForm ListView 列表控件”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
一、ListView 核心概述
从实现思路看,ListView 是 WinForm 常用列表展示控件,用来展示多条结构化数据,类似文件资源管理器效果,兼容五种展示视图,常搭配 ImageList 图标集合实现图文列表。
核心结构层级(必考)
- ListView:整个列表容器控件
- Column 列:表头(仅 Details 详情模式生效)
- ListViewItem 项:每一行主数据(第一列内容)
- SubItems 子项:该行后续单元格多列数据
二、ListView 五种显示视图(View 枚举)
借助 View 属性设置展示样式,默认值:LargeIcon(大图标)
属性值 | 说明 |
|---|---|
Details | 详细视图,标准的二维表格,第一行为表头(最常用) |
LargeIcon(默认值) | 大图标,每一项显示为一个大图标 |
SmallIcon | 小图标,每一项显示为一个小图标 |
List | 列表,每项单行展示 |
Tile | 平铺,显示大图标,并在右侧显示详细信息 |
核心注意:仅 Details 详情模式 兼容显示表头、网格线、整行选中效果。
三、ListView 常用属性(官方完整版)
属性 | 说明 |
|---|---|
Name | 控件的名称,用来后台调用控件 |
Items | 包含控件中所有行项的集合 |
Columns | 控件中显示的所有列标题的集合 |
View | 控件的显示视图(五种枚举样式) |
LargeImageList | 大图标视图所采用的 ImageList 图标集合 |
SmallImageList | 小图标视图所采用的 ImageList 图标集合 |
GridLines | 是否显示行列网格线(仅详情模式生效) |
MultiSelect | 是否允许鼠标多选列表项 |
SelectedItems | 拿到控件中所有已选中的项 |
FullRowSelect | 单击单元格是否选中整行及所有子项 |
四、ListView 常用方法(官方完整版)
方法 | 说明 |
|---|---|
Clear | 从控件中移除所有项和列,清空ListView |
五、ListView 常用事件(官方完整版)
事件 | 说明 |
|---|---|
Click | 在单击ListView控件时触发 |
SelectedIndexChanged | 当选定项发生更改时触发 |
六、完整实战代码(逐行考点注释)
using System;
using System.Windows.Forms;
namespace _02ListView
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 1. 绑定大图标的图片集合
listView2.LargeImageList = imageList1;
// 2. 绑定小图标的图片集合
listView2.SmallImageList = imageList2;
// 3. 设置为【详情表格模式】(支持多列)
listView2.View = View.Details;
// 4. 添加表头列
listView2.Columns.Add("名称");
listView2.Columns.Add("修改时间");
listView2.Columns.Add("类型");
listView2.Columns.Add("大小");
// 5. 创建第一行数据项(主项,第一列内容)
ListViewItem item1 = new ListViewItem("win");
// 给当前行添加多列子数据
item1.SubItems.Add("2026/2/1");
item1.SubItems.Add("文件夹");
item1.SubItems.Add("20G");
// 6. 创建第二行
ListViewItem item2 = new ListViewItem("C盘");
item2.SubItems.Add("2026/2/1");
item2.SubItems.Add("文件夹");
item2.SubItems.Add("202G");
// 7. 创建第三行,设置Name用于按键删除
ListViewItem item3 = new ListViewItem("D盘");
item3.Name = "ss"; // 设置唯一标识Key
item3.SubItems.Add("2026/2/1");
item3.SubItems.Add("文件夹");
item3.SubItems.Add("208G");
// 8. 将所有行添加到ListView控件中显示
listView2.Items.Add(item1);
listView2.Items.Add(item2);
listView2.Items.Add(item3);
}
}
}
七、三种删除行方式(必考)
// 1. 根据对象直接删除指定项
listView2.Items.Remove(item1);
// 2. 根据索引删除(索引从0开始)
listView2.Items.RemoveAt(1);
// 3. 根据Name键值删除(最灵活、推荐)
listView2.Items.RemoveByKey("ss");
删除考点总结
- Remove(对象):精准删除指定项
- RemoveAt(索引):按位置删除
- RemoveByKey(Name):必须提前给 Item 设置 Name 属性
八、核心知识点提炼
- ListViewItem:代表一整行数据,构造参数为【第一列文本】
- SubItems:该行后面所有列的文本,数量必须和表头对应
- Columns.Add():添加表头,仅 Details 模式生效
- ImageList搭配:大小图标需分别绑定两个ImageList
- Name属性:用来标识唯一行,实现按键删除、查找
九、高频易错点汇总
- 不设置 View.Details,表头完全不显示
- 结合项目来看,ListViewItem 构造文本是第一列,后面列全部靠 SubItems 添加
- SubItems 数量少于表头列数会缺列,多于则无效
- 从实现思路看,RemoveByKey 删除必须提前赋值 Item.Name,否则删不掉
- 大小图标 ImageList 要分开绑定,不能混用
十、ListView 专属背诵口诀
列表视图五种样,详情表格最常用;
表头Columns先添加,Item是行Sub是列;
大小图标绑图集,视图Details才列表;
删值三种索引名,灵活移除不用愁。
实际处理时,总的来说,WinForm ListView 列表适合结合实际项目边做边理解。先抓住核心思路,再逐步补上细节和边界处理,最后效果会更稳定,也更容易复用。

