【WinForm详细教程四】WinForm中的ProgressBar 、ImageList和ListView控件

news2024/12/23 22:39:53

文章目录

    • 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): 使进度条增加指定的值。

代码示例:

image-20231030162856183

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

效果演示:

动画22

2. ImageList

ImageList用于存储图像资源,并在关联的控件中显示出来。其本身相当于一个图片集合。

属性

  • Images:存储图像的集合,每张图片在集合中都有一个索引和可选的键名。
  • ImageSize:图片的尺寸,确保集合中的所有图片都显示为同样大小的尺寸。
  • NameImageList 控件的名称。

方法

  • 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);
                    //使用imageList
                    label1.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;//B
                listViewItem.SubItems.Add((length / 1024).ToString());//KB
                foreach (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表达式
希望有所帮助,同时欢迎关注我,后面将更新更多相关内容!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

K-means(K-均值)算法

K-means&#xff08;k-均值&#xff0c;也记为kmeans&#xff09;是聚类算法中的一种&#xff0c;由于其原理简单&#xff0c;可解释强&#xff0c;实现方便&#xff0c;收敛速度快&#xff0c;在数据挖掘、聚类分析、数据聚类、模式识别、金融风控、数据科学、智能营销和数据运…

面试题计算器

这篇也是凑数的 ...... 这篇会收录到算法通关村第四关黄金挑战里 计算器 描述 : 给定一个包含正整数、加()、减(-)、乘(*)、除(/)的算数表达式(括号除外)&#xff0c;计算其结果。 表达式仅包含非负整数&#xff0c;&#xff0c; - &#xff0c;*&#xff0c;/ 四种运算符和…

1深度学习李宏毅

目录 机器学习三件事&#xff1a;分类&#xff0c;预测和结构化生成 2、一般会有经常提到什么是标签label&#xff0c;label就是预测值&#xff0c;在机器学习领域的残差就是e和loss​编辑3、一些计算loss的方法&#xff1a;​编辑​编辑 4、可以设置不同的b和w从而控制loss的…

[架构之路-249/创业之路-80]:目标系统 - 纵向分层 - 企业信息化的呈现形态:常见企业信息化软件系统 - 产品(数据)管理

目录 前言&#xff1a; 一、企业信息化的结果&#xff1a;常见企业信息化软件 1.1 产品数据管理 1.1.1 什么是产品数据管理What 1.1.1.1 常见工具 1.1.1.2 软件企业的产品数据管理系统 1.1.2 为什么需要产品数据管理系统Why&#xff1f; 1.1.3 谁需要产品数据管理系统w…

STM32基本定时器中断

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、STM32定时器的结构&#xff1f;1. 51定时器的结构1.1如何实现定时1s的功能&#xff1f; 2. stm32定时器的结构2.1 通用定时器 二、使用步骤1.开启时钟2.初始…

nodejs+vue黄花岗社区核酸检测站-计算机毕业设计python-django-php

对黄花岗社区核酸检测站系统进行大力的研究&#xff0c;主要是因为黄花岗社区核酸检测站系统对于社区的推进有着十分重要的作用&#xff0c; 对于社区的管理来说&#xff0c;黄花岗社区核酸检测站系统是十分有效的一个途径&#xff0c;也正是因为这样的特殊性使得在对社区进行管…

解决:http://localhost:8080 不在以下 request 合法域名列表中

在搭建资源服务器时&#xff0c;遇到了微信开发者工具中无法访问本地资源服务器的情况&#xff0c;报错如下&#xff1a; 参考一篇博文的方法&#xff0c;完美解决 【解决】http://localhost:8080 不在以下 request 合法域名列表中_localhost不在以下 request 合法域名列表中-…

前端react入门day02-React中的事件绑定与组件

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 React中的事件绑定 React 基础事件绑定 使用事件对象参数 传递自定义参数 同时传递事件对象和自定义参…

React的useEvent 和 ahooks 的 useMemorizedFn 的深度分析和对比

父组件 const TestParent: React.FC<any> () > {const [State, setState] useState(0);const changeFun useCallback(() > {console.log(useCallback closure 里的 State, State);}, [State]);const changeFun_useEvent useEvent(() > {console.log(useEv…

Windows下多Chrome谷歌浏览器版本共存

场景 某些年代久远的 WEB 应用&#xff0c;必须在指定的浏览器或版本才能正常运行&#x1f602;&#xff0c;此时就需要多个版本 chrome 浏览器共存。 解决方案 下载指定版本 可以从 https://www.chromedownloads.net/ 下载需要的版本&#xff0c;此处下载的是87.0.4280.14…

【Python微信机器人】第三篇:使用ctypes调用进程函数和读取内存结构体

目录修整 目前的系列目录(后面会根据实际情况变动): 在windows11上编译python将python注入到其他进程并运行注入Python并使用ctypes主动调用进程内的函数和读取内存结构体使用汇编引擎调用进程内的任意函数利用beaengine反汇编引擎的c接口写一个pyd库&#xff0c;用于实现inl…

Java使用OkHttp库采集电商视频简单代码示例

很多朋友经常问我&#xff0c;能不能用OkHttp库的Java编写一个淘宝视频的采集程序&#xff0c;今天它来了&#xff01;在市面上众多的采集框架中&#xff0c;OkHttp库的应用比较广泛&#xff0c;而且也是非常的稳定&#xff0c;下面的代码示例不知道能不能满足大家的胃口呢&…

Docker安装部署[8.x]版本Elasticsearch+Kibana+IK分词器

文章目录 Docker安装部署elasticsearch拉取镜像创建数据卷创建网络elasticsearch容器&#xff0c;启动&#xff01;踩坑&#xff1a;虚拟机磁盘扩容 Docker安装部署Kibana拉取镜像Kibana容器&#xff0c;启动&#xff01; 安装IK分词器安装方式一&#xff1a;直接从github上下载…

【网络】应用层 -- http协议

目录 一、认识URLurlencode和urldecode 二、HTTP协议HTTP协议格式HTTP的方法HTTP的状态码HTTP常见Header 一、认识URL URL叫做统一资源定位符&#xff0c;也就是我们平时俗称的网址&#xff0c;是因特网的万维网服务程序上用于指定信息位置的表示方法。 urlencode和urldecode …

单元测试反射注解

单元测试 就是针对最小的功能单元(方法)&#xff0c;编写测试代码对其进行正确性测试。 咱们之前是如何进行单元测试的&#xff1f;有啥问题 &#xff1f; Junit单元测试框架 可以用来对方法进行测试&#xff0c;它是由Junit公司开源出来的 具体步骤 Junit框架的常见注解…

resource manager attributes structure(iofunc_attr_t) 扩展实例

文章目录 前言一、attributes structure(iofunc_attr_t)是什么二、iofunc_attr_t 扩展实例1. iofunc_attr_t 未扩展前的使用实例2. iofunc_attr_t 扩展后的使用实例总结参考资料前言 本文主要介绍如何扩展 QNX resource manager 的 attributes structure(iofunc_attr_t) 属性数…

cortex-A7核UART总线

1.总线 各个部件之间传输一种媒介 2.串行总线 3.并行总线 4.同步和异步 同步&#xff1a; 异步&#xff1a; 5.ST-LINK仿真器连接方式 6.串口通信信息---异步串行全双工总线 串口配置信息8N1代表什么? 7.串口通讯协议

三、 链表

一、链表的定义 链表是一种动态数据结果&#xff0c;内存分配不是在创建链表时一次性完成的&#xff0c;每添加一个节点&#xff0c;分配一次内存&#xff0c;由于没有闲置的内存&#xff0c;链表的空间效率高于数组 二、定义单向链表 struct ListNode {int m_nValue;ListNo…

UG NX机械设计软件常见安装问题

UG软件版本这里咱们就不提了&#xff0c;大部分伙伴应该都是钩子激活软件&#xff0c;肯定会遇到或多或少的安装问题&#xff0c;今天这里给大家总结了下&#xff0c;需要的小伙伴自取。 有其他问题可以一起讨论&#xff0c;也希望看到的小伙伴多关注支持哦。 安装UGNX的必要…

第二个GDAL程序

之前看过一个GDAL入门程序&#xff0c;下面再看一个&#xff0c;熟悉一下GDAL&#xff1b; #include "stdafx.h" #include <gdal_priv.h>int main() {//注册文件格式GDALAllRegister();const char* pszFile "D:\\3dtile\\GDALtestdata\\7-Data\\calss.t…