【WinForm详细教程四】WinForm中的ProgressBar 、ImageList和ListView控件
文章目录
- 1.ProgressBar
- 2. ImageList
- 3.ListView控件
1.ProgressBar
用于显示某个操作的进度。
属性:
- Value: 表示当前进度条的值,其范围由Min和Max决定。
- Step: 设置每次调用PerformStep()方法时增加的步长。
- MarqueeAnimationSpeed: 在Style设置为Marquee时,控制滚动的速度,单位为毫秒。
- Max: 设置进度条的最大值。
- Min: 设置进度条的最小值。
- Style: 设置进度条的样式,包括Blocks、Continuous和Marquee。
方法:
- PerformStep(): 使进度条增加Step属性所设置的步长。
- Increment(int value): 使进度条增加指定的值。
代码示例:

namespace WinFormsTest
{public partial class frmProgressBar : Form{public frmProgressBar(){InitializeComponent();}private void frmProgressBar_Load(object sender, EventArgs e){//pbrData.MarqueeAnimationSpeed = 0;//滚动的速度//pbrData.Style = ProgressBarStyle.Marquee;pbrData.Style = ProgressBarStyle.Continuous;pbrData.Maximum = 100;pbrData.Minimum = 0;pbrData.Value = 0;pbrData.Step = 1;}double count = 0;private void btnLoad_Click(object sender, EventArgs e){//pbrData.MarqueeAnimationSpeed = 1000;//滚动的速度pbrData.Maximum = string.IsNullOrWhiteSpace(textBox1.Text) ? 100 : Convert.ToInt16(textBox1.Text);label1.Visible = true;timer1.Interval = 1000;//计时器每秒执行一次timer1.Enabled = true;}private void timer1_Tick(object sender, EventArgs e){// 当进度条的值达到最大值时,停止定时器if (pbrData.Value >= pbrData.Maximum){timer1.Enabled = false;MessageBox.Show("加载完毕!");}else{count += pbrData.Step;pbrData.PerformStep(); // 进度条增加一个步长label1.Text = Convert.ToString(Convert.ToInt32((count / pbrData.Maximum) * 100)) + "%";}}private void textBox1_KeyPress(object sender, KeyPressEventArgs e){// 判断输入的字符是否为数字或控制字符(如退格键)if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar)){e.Handled = true; // 设置Handled为true,表示事件已处理,不再继续处理该字符的输入}}private void btnPause_Click(object sender, EventArgs e){timer1.Enabled = false;}private void btnContinue_Click(object sender, EventArgs e){timer1.Enabled = true;}}
}
效果演示:

2. ImageList
ImageList用于存储图像资源,并在关联的控件中显示出来。其本身相当于一个图片集合。
属性
Images:存储图像的集合,每张图片在集合中都有一个索引和可选的键名。ImageSize:图片的尺寸,确保集合中的所有图片都显示为同样大小的尺寸。Name:ImageList控件的名称。
方法
Add(Image/Icon):添加一张图片或图标到Images集合中。Add(string, Image/Icon):添加一张图片或图标到Images集合中,并指定一个键名。Contains(Image/String):判断Images集合中是否包含指定的图片或键名。IndexOf(Image/String):获取指定图片或键名在Images集合中的索引。Remove(Image):从Images集合中移除指定的图片。RemoveAt(int):从Images集合中移除指定索引处的图片。RemoveByKey(string):从Images集合中移除指定键名的图片。SetKeyName(int, string):为Images集合中指定索引处的图片设置一个键名。
代码示例
namespace WinFormsTest
{public partial class frmImageList : Form{public frmImageList(){InitializeComponent();}private void frmImageList_Load(object sender, EventArgs e){string imagedirPath = @"G:\Desktop\Images\";if (Directory.Exists(imagedirPath)){string[] stringsPath = Directory.GetFiles(imagedirPath);if (stringsPath.Length > 0){string[] fileType = { ".jpg", ".png" };foreach (string s in stringsPath){if (fileType.Contains(Path.GetExtension(s))){Image image = Image.FromFile(s);string keyName = Path.GetFileNameWithoutExtension(s);imageList1.Images.Add(keyName, image);}}imageList1.ImageSize = new Size(40, 40);//使用imageListlabel1.ImageList = imageList1;label1.ImageKey = "1";button1.ImageList = imageList1;button1.ImageIndex = 2;}}}}
}

3.ListView控件
ListView分组显示
- 项添加时,需要考虑分组,根据项的名称或编号将其分到对应的组中。
- 建立分组关系,分别有组名和编号。
- 关系存储起来,分组时,就以这个关系为准。
ListView应用实例
- 视图模式:大图标,小图标,列表,瓷贴,详细信息。
- 初始化已实现的五种视图。
ListView控件
- 属性
- ShowGroups: 是否显示组
- Groups: 组集合
- Items: 项的集合
- MultiSelect: 是否可以多选
- SmallImageList: 除大图标视图外的所有视图图像的ImageList控件
- LargeImageList: 大图标视图图像的ImageList控件
- AutoArrange: 是否自动排列
- CheckedIndices: 被选中的项的索引
- CheckedItems: 被选中的项
- SelectedIndices: 被选中的项的索引
- SelectedItems: 被选中的项
- 方法
- Add: 添加项
- Remove: 删除项
- Clear: 清空所有项
- 事件
- SelectedIndexChanged: 选中项索引变化事件
- ColumnClick: 列点击事件
- ItemChecked: 项被选中事件
代码示例
namespace WinFormsTest
{public partial class frmListView : Form{public frmListView(){InitializeComponent();}Dictionary<string, string> dicGroup = new Dictionary<string, string>();private void frmListView_Load(object sender, EventArgs e){LoadImgList(); //加载图片资源到imageList中//对ViewList进行分组lvList.Groups.Clear();lvList.Groups.Add(new ListViewGroup("熊大小时候", HorizontalAlignment.Center));lvList.Groups.Add(new ListViewGroup("哆啦A梦生气", HorizontalAlignment.Center));lvList.Groups.Add(new ListViewGroup("哆啦A梦吹口哨", HorizontalAlignment.Center));lvList.Items.Clear();//关系存储dicGroup.Add("熊大小时候", "1");dicGroup.Add("哆啦A梦生气", "2");dicGroup.Add("哆啦A梦吹口哨", "3");lvList.ShowGroups = true;//创建详细信息的表头lvList.Columns.Add("文件名", 100, HorizontalAlignment.Left);lvList.Columns.Add("创建日期", 160, HorizontalAlignment.Left);lvList.Columns.Add("类型", 60, HorizontalAlignment.Left);lvList.Columns.Add("大小", 60, HorizontalAlignment.Left);for (int i = 0; i < dic.Count; i++){ListViewItem listViewItem = new ListViewItem();listViewItem.ImageIndex = i;listViewItem.Text = lglSmall.Images.Keys[i];listViewItem.SubItems.Add(File.GetCreationTime(dic[i]).ToString());//创建日期listViewItem.SubItems.Add(Path.GetExtension(dic[i]));//类型long length = new FileInfo(dic[i]).Length;//BlistViewItem.SubItems.Add((length / 1024).ToString());//KBforeach (ListViewGroup lvgg in lvList.Groups){if (listViewItem.Text.Substring(0, 1) == dicGroup[lvgg.Header]){listViewItem.Group = lvgg;break;}}lvList.Items.Add(listViewItem);}lvList.View = View.LargeIcon; //制定初始的视图模式lvList.LargeImageList = lglLarge;lvList.SmallImageList = lglSmall;}Dictionary<int, string> dic = new Dictionary<int, string>();private void LoadImgList(){string path = @"G:\Desktop\Images";if (Directory.Exists(path)){string[] files = Directory.GetFiles(path);if (files.Length > 0){lglSmall.Images.Clear();lglLarge.Images.Clear();int index = 0;string[] fileType = { ".jpg", ".png" };foreach (string file in files){if (fileType.Contains(Path.GetExtension(file))){Image img = Image.FromFile(file);string key = Path.GetFileNameWithoutExtension(file);lglLarge.Images.Add(key, img);lglSmall.Images.Add(key, img);dic.Add(index, file);index++;}}lglLarge.ImageSize = new Size(50, 70);lglSmall.ImageSize = new Size(20, 20);}}}private void btnLarge_Click(object sender, EventArgs e){lvList.View = View.LargeIcon;}private void btnSmall_Click(object sender, EventArgs e){lvList.View = View.SmallIcon;}private void btnList_Click(object sender, EventArgs e){lvList.View = View.List;}private void btnDetail_Click(object sender, EventArgs e){lvList.View = View.Details;lvList.GridLines = true;// 显示网格}private void btnTile_Click(object sender, EventArgs e){lvList.View = View.Tile; //它的图标也使用的是LargeList}private void btnDivideOpen_Click(object sender, EventArgs e){if (lvList.ShowGroups != true){lvList.ShowGroups = true;}}private void btnDivideOff_Click(object sender, EventArgs e){if (lvList.ShowGroups != false){lvList.ShowGroups = false;}}}
}

精彩推荐:
【C#进阶一】C#中的数组(Array)、集合(ArrayList,Queue,Stack, HashList)、List<T>、字典(Dictionary<K,T>)和双向链表LinkedList
【C#进阶八】C#中的序列化与反序列化下(二进制序列化、XML序列化及JSON序列化)
【C#进阶】C#语法中一些常用知识点总结
【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox
【WinForm详细教程三】WinForm中的NumericUpDown、PictureBox、RichTextBox及三种Timer控件
【C#进阶】C#中的委托、事件、回调函数、匿名函数和lambda表达式
希望有所帮助,同时欢迎关注我,后面将更新更多相关内容!
相关文章:
【WinForm详细教程四】WinForm中的ProgressBar 、ImageList和ListView控件
文章目录 1.ProgressBar2. ImageList3.ListView控件 1.ProgressBar 用于显示某个操作的进度。 属性: Value: 表示当前进度条的值,其范围由Min和Max决定。Step: 设置每次调用PerformStep()方法时增加的步长。MarqueeAnimationSpeed: 在Style设置为Marq…...
写一个简单实用的Excel工具类
我们在开发中经常要将数据导入成Excel表格供展示,也需要解析Excel中的数据,官方提供的api操作太麻烦,这边封装了一个Excel工具类,可以很轻松的实现Excel的操作 首先加入依赖 <dependencies><!-- EasyPoi 基本库依赖 --…...
C#中LINQtoObjects、LINQtoDataSet和LINQtoXML
目录 一、使用LINQ操作数组和集合 二、使用LINQ操作DataSet数据集 1.AsEnumerable()方法 2.CopyToDataTable()方法 3.AsDataView()方法 4.Take()方法 5.Sum()方法 6.示例 (1)源码 (2)生成效果 三、使用LINQ操作XML 1.…...
k8s中 RBAC中,clusterrole,serviceaccount , rolebinding 是什么关系谁先谁后
在Kubernetes的RBAC(Role-Based Access Control)中,ClusterRole、ServiceAccount和RoleBinding是三个关键的组件,它们之间的关系如下: ClusterRole:ClusterRole 是一种全局的权限规则,它定义了一…...
什么是文件安全
文件安全就是通过实施严格的访问控制措施和完美的权限卫生来保护您的业务关键信息不被窥探,除了启用和监控安全访问控制外,整理数据存储在保护文件方面也起着重要作用。通过清除旧的、过时的和其他垃圾文件来定期优化文件存储,以专注于关键业…...
maven的settings.xml和pom.xml配置文件详解
一、配置文件 maven的配置文件主要有 settings.xml 和pom.xml 两个文件。 其中在maven安装目录下的settings.xml,如:D:\Program Files\apache-maven-3.6.3\conf\settings.xml 是全局配置文件 用户目录的.m2子目录下的settings.xml,如&#…...
YB2503HV 100V 3A SOP8内置MOS 高效率降压IC(昱灿)
YB2503HV 100V 3A SOP8内置MOS 高效率降压IC 描述: YB2503HV是单片集成可设定输出电流的开关型降压恒压驱动器,可工作在宽输入电压范围具有优良的负载和线性调整度。安全保护机制包括每周期的峰值限流、软启动、过压保护和温度保护。YB2503HV需要非常少…...
Redis安装Linux
1、下载安装包 wget http://download.redis.io/releases/redis-3.0.0.tar.gz 2、安装 mkdir /usr/local/redis cp redis-3.0.0.tar.gz /usr/local/redis cd /usr/local/redis tar -zxvf redis-3.0.0.tar.gz cd /usr/local/redis/redis-3.0.0 make PREFIX/usr/local/red…...
PCL点云处理(007)-Ransac
随机抽样一致性算法RANSAC(Random sample consensus)是一种迭代的方法来从一系列包含有离异值的数据中计算数学模型参数的方法。 RANSAC算法本质上由两步组成,不断进行循环: 从输入数据中随机选出能组成数学模型的最小数目的元素,使用这些元素…...
有方N58 HTTP POST 请求连接 TDengine
串口调试软件:格西调试精灵 第一步先注册网络获取IP地址 建立PPP连接 ATXIIC1\r PPP链路建立成功,查询IP地址 ATXIIC?\r 设置网络APN ATCREG?\r 运行结果,红线处是获…...
基于Python+Pygame实现一个滑雪小游戏
目录 项目介绍Pygame介绍项目文件夹介绍演示视频代码免费领取 一、项目介绍 使用介绍:运行main.py文件后,通过左右按键可以控制小人的移动,如果经过旗杆那么10分,如果碰到树木那么减50分。 二、Pygame介绍 Pygame是一个用于游…...
【限制输入框值类型】自定义指令el-input输入类型限制,vue和html两个版本
前言 经常遇到输入框需要限制只能输入数字的, 因为用户很离谱,明显输入数字的地方他非要输入英文或者中文 但是用到UI框架或者自己写方法验证表单比较麻烦 为了一个输入框专门去弄一个验证很麻烦 所以这里就整合了两种自定义指令的方式,更加…...
对一个金融风控测额公式的理解(1)
目录 公式:(近3个月回款总额/过去3个月的FBA平均库存价值)*最近FBA的库存价值*过去13周FBA发货比例 详细讨论一下这个:(近3个月回款总额/过去3个月的FBA平均库存价值) 既然(近3个月回款总额/…...
【GEE】2、探索数据集
1简介 在本单元中,我们将讨论以下概念: Google 地球引擎中可用的潜在数据来源。 通过生态示例显示的数据集采样用例。 如何使用 Google 地球引擎访问重要的元数据。 2背景 要将遥感集成到您的研究和分析中,学习如何解析 Google 地球引擎上…...
开发一款直播弹幕游戏需要多少钱?
开发一款直播弹幕游戏需要多少钱?有好多朋友在咨询过弹幕游戏的开发价格后,都会比较吃惊,一款体量这么小的游戏为什么动辄就要几万块甚至十几万? 我来给你们说分析一下原因,这种游戏如果脱离开直播间,可以…...
STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出
1. 课程概述(297.1) 课程要求:C语言熟练,提前学完 C51 2. 开发软件Keil5的安装(298.2) 开发环境的安装 编程语言:C语言需要安装的软件有两个:Keil5 和 STM32CubeMX Keil5 的安装…...
selenium元素定位 —— 提高篇 CSS定位元素
CSS (Cascading Style Sheets) 是一种用于渲染 HTML 或者 XML 文档的语言,CSS 利用其选择器可以将样式属性绑定到文档中的指定元素。理论上说无论一个元素定位有多复杂都能够定位到元素。 因为不同的浏览器 XPath 引擎不同甚至没有自己的 Xpath 引擎,这…...
隔离和非隔离电源的区别
一、电源隔离与非隔离 电源的隔离与非隔离,主要是针对开关电源而言,业内比较通用的看法是: 1、隔离电源:电源的输入回路和输出回路之间没有直接的电气连接,输入和输出之间是绝缘的高阻态,没有电流回路。 …...
C语言自定义数据类型
一、构造数据类型 构造数据类型:用户自己建立的数据类型(自定义数据类型) C语言中的自定义数据类型有:数组类型、结构体类型、共用体类型和枚举类型。 1.1. 结构体 C语言允许用户根据需要自己建立的由不同类型数据组成的组合型…...
SoftwareTest5 - 你就只知道功能测试吗 ?
你就只知道功能测试吗 ? 一 . 按照测试对象划分1.1 文档测试1.2 可靠性测试1.3 容错性测试1.4 安装卸载测试1.5 内存泄漏测试1.6 弱网测试 二 . 按是否查看代码划分2.1 黑盒测试2.2 白盒测试2.3 灰盒测试 三 . 按照开发阶段划分3.1 单元测试3.2 集成测试3.3 冒烟测试3.4 系统测…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
