C# WinForm —— 27 28 29 30 ListView 介绍与应用

1. 简介

和ListBox的外观类似,都可以多列显示,但 ListView 功能更强大,提供了5种不同的显示方式

2. 属性

属性解释
(Name)控件ID,在代码里引用的时候会用到
Enabled控件是否启用
CheckBoxes复选框是否显示在项旁边
ContextMenuStrip当用户右键该控件时显示的快捷菜单
Dock定义要绑定到容器的控件边框
ItemsListView中的项的集合
AlignmentListView中各项的对齐方式:Default、Left、Top(默认)、SnapToGrid
View显示项的5种不同视图:
LargeIcon:大图标,添加项的时候,默认是多列显示的
SmallIcon:小图标
Details:详细信息
List:列表
Tile:
Columns“详细信息” 视图中显示的列
在这里插入图片描述
AllowColumnReorder是否允许用户重新排列 ”详细信息“视图中各列的顺序
FullRowSelect当项被选中时,其所有子项是否同该项一起突出显示
GridLines在项和子项周围显示网格线。仅在”详细信息“视图中显示
HeaderStyle”详细信息“视图中列标头的样式:Clickable、NonClickable、None
AutoArrange在 大图标 和小图标 视图中,项是否自动进行排列,默认true
LargeImageList大图标、Tile视图中,用于显示的大图标图像集合(ImageList)
SmallImageList除大图标、Tile视图外所有视图中,用于显示的图标图像集合(ImageList)
GroupsListView中的组,集合
LabelEdit是否允许用户就地编辑项标签
labelWrap确定标签文本是否可以换到新行
MultiSelect是否允许选择多项
Scrollable如果控件包含的项过多,超出工作区的范围时,该控件是否显示滚动条
ShowGroups指示控件是否以组的形式显示项
ShowItemToolTips允许ListViewItems显示工具提示
Sorting对项进行排序的方式:None、Ascending、Descending
StateImageListListView为自定义状态所使用的ImageList控件
CheckedIndices所有勾选了复选框的项的索引集合
CheckedItems所有勾选了复选框的项的集合
SelectedIndices所有选中的项的索引集合
SelectedIndex所选中的单个项的索引
SelectedItems所有选定的项

3. 方法

方法解释
BeginUpdate()和 EndUpdate()在大量通过Items方法加载项的时候,在加载项的语句前后分别加上 BeginUpdate() 和 EndUpdate() 语句,可以避免控件出现闪烁
Clear()清空项
EnsureVisible确保指定项在控件中是可见的,必要时滚动控件内容
FindItemWithText找到第一个指定文本开头的项
FindNearestItem按照指定的搜索方向,从指定点开始查找下一个项

4. 事件

事件解释
SelectedIndexChanged每当此ListView的 ”SelectedIndex“属性更改时发生
ColumnClick在单击列标头时发生
AfterLabelEdit在用户已编辑项文本时发生
BeforeLabelEdit在用户将要编辑项文本时发生
ItemCheck指示某项的选中状态将要更改,直到事件发生后,该值才会更新
ItemChecked当ListView项的Checked属性更改时引发的事件
ItemSelectionChanged当某项的选定状态更改时引发的事件

5. 列的集合的操作

操作方法
访问列从集合中获取具有指定键值 / 索引值的列标题
在这里插入图片描述
添加列Add方法,可以指定键名,列名,宽度,对齐方式,图标索引
列的数量Count方法
设置列只读IsReadOnly方法
添加单列Add(ColumnHeader value)
添加多列AddRange(ColumnHeader[] values)
清空所有列Clear()
判断列是否存在Contains(ColumnHeader value)
ContainsKey(string key)
获取列的索引IndexOf(ColumnHeader value)
IndexOfKey(string key)
插入列Insert
移除列Remove(ColumnHeader column)
RemoveAt(int index)
RemoveByKey(string key)

在这里插入图片描述

6. 项的集合的操作

操作方法
访问项从集合中获取具有指定键值 / 索引值的项
设置项只读IsReadOnly
项的数量Count
添加项Add方法,可以指定键名,文本,图标索引/图标键值
添加项的集合AddRange方法
清除项Clear方法
判断项是否存在Contains(ListViewItem item)
ContainsKey(string key)
复制项CopyTo(Array dest, int index)
查找项Find(string key, bool searchAllSubItems)
获取项的索引IndexOf(ListViewItem item)
IndexOfKey(string key)
插入项Insert,可以设置输入项的索引、键值、文本、图像索引/图像键值
移除项Remove(ListViewItem item)
RemoveAt(int index)
RemoveByKey(string key)

7. 组的集合的操作

操作方法
访问组通过指定键值 / 索引值访问
组的数量Count
添加组Add, AddRange
清除组Clear
判断组是否存在Contains(ListViewGroup value)
复制组CopyTo(Array array, int index)
获取组的索引IndexOf(ListViewGroup value)
插入组Insert
移除组Remove(ListViewGroup group)
RemoveAt(int index)

在这里插入图片描述

8. 不同的视图

  1. 拖控件
    在这里插入图片描述
    在这里插入图片描述
  2. 加载图像到 ImageList 组件
private void FrmListView2_Load(object sender, EventArgs e)
{
	// 加载 Form 的时候,默认显示 大图标
	LoadImgList(); //加载图片
	lvList.Items.Clear();
	lvList.ShowGroups = false; // 不分组显示
	if (largeList != null && largeList.Images.Count > 0)
	{
		for (int i=0; i<lareList.Images.Count; i++) // 对于 lareList 中的每张图
		{
			string iText = largeList.Images.Keys[i];  // 图的名字
			// 添加ListView控件中的项
			ListViewItem li = new ListViewItem();
			li.Text = iText;
			li.ImageIndex = i;
			LvList.Items.Add(li);
		}
	}
	lvList.View = View.LargeIcon; // 指定 大图标显示
	lvList.largeImageList = largeList; // 大图标、Tile视图 使用的ImageList
	lvList.SmallImageList = smallList; // 除大图标、Tile视图以外,所有视图使用的ImageList
}

Dictionary<int, string> dic = new Dictionary<int, string>;

private void LoadImgList() // 加载图片集合
{
	string path = @"D:\课件\录制课件\WF\WFFormUse\WFFormUse\Imgs";
	if (Directory.Exists(path))
	{
		string[] files = Directory.GetFiles(path);
		if (files.Length > 0)
		{
			largeList.Images.Clear();
			smallList.Images.Clear();
			int index = 0;
			string[] fileType = {".jpg", ".png"};
			foreach (string fpath in files)
			{
				if (fileType.Contains(Path.GetExtension(fpath)))
				{
					Image img = Image.FromFile(fpath);
					string key = Path.GetFileNameWithoutExtension(fpath);
					largeList.Images.Add(key, img);
					smallList.Images.Add(key, img);
					dic.Add(index, fpath);
					index++;
				}
			}
			// 指定图片尺寸
			largeList.ImageSize = new Size(50, 50);
			smallList.ImageSize = new Size(20, 20);
		}
	}
}
  1. 运行
    大图标的样式:最大化图标,下面显示文本标签
    在这里插入图片描述

  2. 点击 “大图标”按钮,以大图标的样式显示

在这里插入图片描述

  1. 点击 “小图标”按钮,以小图标的样式显示

在这里插入图片描述
小图标的样式:小图标,右边显示文本标签
在这里插入图片描述

  1. 点击 “List”按钮,以列表的样式显示:小图标,右边显示文本标签,各项排列在列中,没有列标头
    在这里插入图片描述

在这里插入图片描述

  1. 点击 "Tile”按钮,以 Tile 的样式显示:大图标, 关联的是largeList,右边显示文本标签,如果还有其他SubItems信息,也显示在右边
    在这里插入图片描述
    在这里插入图片描述
  2. “详细信息”视图:分列显示,第一列显示小图标,右边显示文本,其他列只显示文本,有列标头
private void btnDetails_Click(object sender, EventArgs e)
{
	lvList.Items.Clear();
	lvList.Column.Clear();
	lvList.ShowGroups = false;
	lvList.View = View.Details; 
	// 列的添加
	lvList.Columns.Add("文件名", 100, HorizontalAlignment.Left); // 设置列名,列宽,对齐方式
	lvList.Columns.Add("修改日期", 150, HorizontalAlignment.Left);
	lvList.Columns.Add("类型", 80, HorizontalAlignment.Left);
	lvList.Columns.Add("大小", 60, HorizontalAlignment.Left);
	// 项
	for (int i = 0; i < dic.Count; i++)
	{
		ListViewItem li = new ListViewItem();
		li.ImageIndex = i;
		li.Text = smallList.Images.Keys[i]; // 文件名
		li.SubItems.Add(File.getCreationTime(dic[i]).ToString()); // 修改日期
		li.SubItems.Add(Path.getExtension(dic[i])); // 类型
		long length = new FileInfo(dic[i]).Length; // 获取文件大小,以字节为单位
		li.SubItems.Add((length/1024).ToString()); // 文件大小, kb为单位
		lvList.Items.Add(li);
	}
	lvList.GridLines = true; // 显示网格
}

在这里插入图片描述
再点击“Tile”按钮时:
在这里插入图片描述

  1. 分组功能
    在这里插入图片描述
private void btnGroup_Click(object sender, EventArgs e)
{
	lvList.ShowGroups = true;
	//添加组
	lvList.Groups.Clear();
	lvList.Groups.Add(new ListViewGroup("花", HorizontalAlignment.Center));
	lvList.Groups.Add(new ListViewGroup("动物", HorizontalAlignment.Center));
	lvList.Groups.Add(new ListViewGroup("人物", HorizontalAlignment.Center));
	lvList.Groups.Add(new ListViewGroup("风景", HorizontalAlignment.Center));
	// 组名--图片名称中包含了分组信息
	Dictionary<string, string> dicGroup = new Dictionary<string, string>();
	dicGroup.Add("花", "04");
	dicGroup.Add("动物", "01");
	dicGroup.Add("人物", "02");
	dicGroup.Add("风景", "03");
	// 分组
	for (int i = 0; i < lvList.Items.Count; i++)
	{
		foreach(ListViewGroup lvg in lvList.Groups)
		{
			// 判断项文本的前两个字符是否与组所对应的编号一致,如果一致,就将该项分到这一组
			if (lvList.Items[i].Text.Substring(0,2) == dicGroup[lvg.Header])
			{
				lvList.Items[i].Group = lvg; // 设置项所属的组
				break;
			}
		}
	}
}

运行,点击 “分组显示” 按钮,大图标视图:
在这里插入图片描述
小图标视图:
在这里插入图片描述
List视图 不支持分组显示
在这里插入图片描述
先点 “分组显示” ,再点 “详细信息”,因为点击 “详细信息”的时候,清空了ListView控件中的信息后重新添加项和列的,所以没有分组信息:
在这里插入图片描述
先点 “详细信息”,再点 “分组显示”:
在这里插入图片描述
Tile视图:
在这里插入图片描述

参考:2023年C#之WinForm零基础教程50讲

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/675932.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浏览器渲染优--防抖节流懒加载

合理选择css选择器 相比于.content-title-span&#xff0c;使用.content .title span时&#xff0c;浏览器计算样式所要花费的时间更多。使用后面一种规则&#xff0c;浏览器必须遍历页面上所有 span 元素&#xff0c;先过滤掉祖先元素不是.title的&#xff0c;再过滤掉.title…

拿笔记下来!产品采购制造类合同怎样写比较稳妥?

拿笔记下来&#xff01;产品采购制造类合同怎样写比较稳妥&#xff1f; 近日&#xff0c;几经波折&#xff0c;泰中两国终于完成了潜艇采购谈判&#xff01;你知道吗&#xff1f;产品制造类合同或协议在起草前如果没有充分考虑各种因素&#xff0c;可能会导致一系列问题和不利…

奶茶店、女装店、餐饮店是高危创业方向,原因如下:

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 现在的俊男靓女们&#xff0c;心中都有一个执念&#xff1a; (1)想证明自己了&#xff0c;开个奶茶去…… (2)想多赚点钱了&#xff0c;加盟餐饮店去…… (3)工作不顺心了&#xff0c;搞个女装店去…… 但凡抱着…

【scau数据库实验一】mysql_navicat_数据库定义实验、基本命令

实验一开始之前&#xff0c;如果还有不会使用navicat建议花五分钟补课哦~ 补课地址&#xff1a;【scau数据库实验先导】mysql_navicat_数据库新建、navicat的使用-CSDN博客 实验目的&#xff1a; 理解和掌握数据库DDL语言&#xff0c;能够熟练地使用SQL DDL语句创建、修改和删…

mac电脑用谷歌浏览器对安卓手机H5页面进行inspect

1、mac上在谷歌浏览器上输入 chrome://inspect 并打开该页面。 2、连接安卓手机到Mac电脑&#xff1a;使用USB数据线将安卓手机连接到Mac电脑。 3、手机上打开要的h5页面 Webview下面选择要的页面&#xff0c;点击inspect&#xff0c;就能像谷歌浏览器页面打开下面的页面&#…

Vue——初识组件

文章目录 前言页面的构成何为组件编写组件组件嵌套注册 效果展示 前言 在官方文档中&#xff0c;对组件的知识点做了一个很全面的说明。本篇博客主要写一个自己的案例讲解。 vue 官方文档 组件基础 页面的构成 说到组件之前&#xff0c;先大致说明下vue中页面的构成要素。 在…

Claude 3可使用第三方API,实现业务流程自动化

5月31日&#xff0c;著名大模型平台Anthropic宣布&#xff0c;Claude3模型可以使用第三方API和工具。 这也就是说&#xff0c;用户通过文本提问的方式就能让Claude自动执行多种任务&#xff0c;例如&#xff0c;从发票中自动提取姓名、日期、金额等&#xff0c;该功能对于开发…

【问题随记】System policy prevents Wi-Fi scans,解决连接 WIFI 需要权限的问题

问题随记 System policy prevents Wi-Fi scans&#xff0c;每次打开我的开发板连接 wifi 都会出现下面的弹窗&#xff0c;这也阻挡了我的WIFI自动连接&#xff0c;然后就需要连上屏幕&#xff0c;输入 wifi 密码&#xff0c;这样才能进行 VNC、SSH 等一系列的连接。 问题解决 …

『 Linux 』缓冲区(万字)

文章目录 &#x1f9a6; 什么是缓冲区&#x1f9a6; 格式化输入/输出&#x1f9a6; 刷新策略&#x1fab6; 块缓冲(fully buffered)&#x1fab6; 无缓冲(unbuffered)&#x1fab6; 行缓冲(line buffered) &#x1f9a6; 现象解释&#x1f9a6; exit()与_exit()&#x1f9a6; 进…

CPU 使用率过高问题排查

文章目录 CPU 使用率过高问题排查1. CPU使用率过高常见问题2. 压力测试2.1 stress安装参数说明测试示例 2.2 stress-ng安装参数说明测试示例 3. 问题排查3.1 使用 top 命令3.2 使用 ps 命令3.3 使用 perf top3.4 vmstat 命令常用信息内存信息磁盘信息 CPU 使用率过高问题排查 …

Plotting World Map in Python

1. 方法一 pygal Plotting World Map Using Pygal in Python import pygal # create a world map worldmap pygal.maps.world.SupranationalWorld() # set the title of map worldmap.title Continents# adding the continents worldmap.add(Africa, [(africa)]) worl…

【微信小程序】小锦哥小程序工具 v2.3.8.0

# 简介 小锦哥小程序工具是一款可以对微信小程序进行解密或者反编译的工具&#xff0c;通过这款工具&#xff0c;可以对别人已经发布的小程序进行解密或者是反编译&#xff0c;然后查看源代码。对于网络安全人员来说&#xff0c;可以使用该工具进行安全审计&#xff0c;发现其…

四川汇聚荣聚荣科技有限公司评价怎么样?

四川汇聚荣聚荣科技有限公司评价如何?在科技日新月异的今天&#xff0c;四川汇聚荣聚荣科技有限公司作为业界的一员&#xff0c;其表现自然引起了广泛关注。那么&#xff0c;这家公司究竟如何呢?接下来&#xff0c;我们将从四个不同方面对其进行深入剖析。 一、技术实力 四川…

3DGS语义分割之LangSplat

LangSplat是CVPR2024的paper. 实现3DGS的语义分割&#xff08;可文本检索语义&#xff09; github: https://github.com/minghanqin/LangSplat?tabreadme-ov-file 主要思想是在3DGS中加入了CLIP的降维语义特征&#xff0c;可用文本检索目标&#xff0c;实现分割。 配置环境&…

三十四、openlayers官网示例Dynamic clusters解析——动态的聚合图层

官网demo地址&#xff1a; https://openlayers.org/en/latest/examples/clusters-dynamic.html 这篇绘制了多个聚合图层。 先初始化地图 &#xff0c;设置了地图视角的边界extent&#xff0c;限制了地图缩放的范围 initMap() {const raster new TileLayer({source: new XYZ…

导入和使用标准模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;自带了很多实用的模块&#xff0c;称为标准模块&#xff08;也可以称为标准库&#xff09;&#xff0c;对于标准模块&#xf…

韩顺平0基础学java——第15天

p303-326 重写override 和重载做个对比 注&#xff1a;但子类可以扩大范围&#xff0c;比如父类是protected&#xff0c;子类可以是public 多态 方法或对象具有多种形态&#xff0c;是面向对象的第三大特征&#xff0c;多态是建立在封装和继承基础之上的。 多态的具体体现…

Ubuntu server 24 (Linux) 安装部署smartdns 搭建智能DNS服务器

SmartDNS是推荐本地运行的DNS服务器&#xff0c;SmartDNS接受本地客户端的DNS查询请求&#xff0c;从多个上游DNS服务器获取DNS查询结果&#xff0c;并将访问速度最快的结果返回给客户端&#xff0c;提高网络访问速度和准确性。 支持指定域名IP地址&#xff0c;达到禁止过滤的效…

【YOLOv5/v7改进系列】引入ODConv——即插即用的卷积块

一、导言 提出了一种称为全维度动态卷积(ODConv)的新颖设计&#xff0c;旨在克服当前动态卷积方法的局限性并提升卷积神经网络(CNN)的性能。以下是该论文提出的全维度动态卷积设计的优点和存在的缺点分析&#xff1a; 优点&#xff1a; 增强特征学习能力&#xff1a; ODConv通…

第十五届蓝桥杯物联网试题(省赛)

这个省赛题不算难&#xff0c;中规中矩&#xff0c;记得看清A板B板&#xff0c;还有ADC的获取要配合定时器