您的当前位置:首页>全部文章>文章详情

【C#】C# Winform 自定义进度条ProgressBar

CrazyPanda发表于:2024-02-01 23:33:15浏览:337次TAG:

效果:

1.png


一、前言

Winfrom各种老毛病真的不适合做大型项目,甚至中型项目都不适合,一些小功能都能把你折腾半死,比如,我想在界面上显示一个进度条,用来显示现在硬盘和内存已经使用了多少,使用了 ProgressBar 控件你看看效果:

01174706_63da351a96fff24847.gif

进度条中间一直有个白色光影在晃来晃去的,是不是想让别人感慨:“哇!好强的光芒,我的眼睛快睁不开了...”。而且背景颜色无法改变,这个动画也无法关掉,为了解决这两个问题,我找了很久,终于找到了下面的解决方法。


二、自定义进度条

于是我在网上找了一些资料,有到效果有,但不是特别漂亮,比如下面这个

C# WinForm 自定义进度条控件_科技_品阅网

另外,我参考了下面到帖子

Winform自定义控件-进度条/图片图标进度条_思无心的博客-CSDN博客_winform进度条控件


1.添加用户控件

添加一个用户控件,取名为 ProgressBarControl

1.png

添加完成后,界面如下

1.png

我们将界面调整一下,让其看上去像个进度条,比如宽度 250,高度 30

1.png

2.添加代码

代码:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace 自定义控件
{
    public partial class ProgressBarControl : UserControl
    {
        private int val;//进度值
        private Color PBackgroundColor = Color.FromArgb(217, 218, 219);//初始化颜色
        private Color PForegroundColor = Color.Green;
 
        public ProgressBarControl()
        {
            InitializeComponent();
        }
 
        /// <summary>
        /// 背景色
        /// </summary>
        public Color pBackgroundColor
        {
            get => PBackgroundColor;
            set
            {
                PBackgroundColor = value;
                this.BackColor = PBackgroundColor;
            }
        }
 
        /// <summary>
        /// 前景色
        /// </summary>
        public Color pForegroundColor
        {
            get => PForegroundColor;  
            set => PForegroundColor = value;
        }
 
        /// <summary>
        /// 当前值
        /// </summary>
        public int Val
        {
            get => val;
            set
            {
                val = value;
                this.Invalidate();
            }
        }
 
 
        protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            SolidBrush brush = new SolidBrush(PForegroundColor);
            float percent = val / 100f;
            Rectangle rect = this.ClientRectangle;
            rect.Width = (int)((float)rect.Width * percent);
            rect.Height = this.Height;
            g.FillRectangle(brush, rect);
            brush.Dispose();
            g.Dispose();
        }
 
        private void InitializeComponent()
        {
            this.SuspendLayout();
            this.Name = "ProgressBarControl";
            this.Size = new System.Drawing.Size(250, 30);
            this.ResumeLayout(false);
 
        }
    }
}

 添加代码完成后,就完成了基本的操作了,下面开始使用


 三、使用方法

先点击Form1 界面,在工具箱就可以看到 命名空间对应的自定义组件了

1.png

将 ProgressBarControl 控件直接拖入到Form1中即可,如下

1.png

然后在属性窗体就可以看到比Winform的ProgressBar多出来一些功能,这就是你在代码中添加的

1.png

我们可以将背景颜色改为其他颜色

1.png

改变进度条到进度,使用下面代码即可

progressBarControl1.Val = 50;

 效果:

1.png

 本案例源码:点击下载


结束

如果这个帖子对你有用,欢迎 关注 + 点赞 + 留言,谢谢

end


原文链接C# Winform 自定义进度条ProgressBar_winform 进度条-CSDN博客

猜你喜欢

【C#】C#实现Excel合并单元格数据导入数据集
目录功能需求Excel与DataSet的映射关系范例运行环境Excel DCOM 配置设计实现组件库引入方法设计返回值&nbsp;参数设计打开数据源并计算Sheets拆分合并的单元格创建DataTable将单元格数据写入DataTable总结功能需求将Excel里的worksheet表格导入到DataSet里,是项目应用里常用的一种操作。一般情况下,worksheet是一个标准的二维数组,如下图:我们可以效仿 MS SQL SERVER 的一些基本导入选项,如首行是否包含数据,要导入哪个Shee
发表于:2024-01-29 浏览:356 TAG:
【C#】Winform NanUI 0.77版本 清除Cookie等本地缓存
目录需求NanUI0.88版本的缓存路径NanUI0.77版本的缓存路径试着实现功能添加扩展出现的问题解决问题结束需求清除web前端保存的一些的数据,或者清除浏览器缓存会用到。NanUI0.88版本的缓存路径在NanUI0.88版本中,只要在Program.cs启动模块中调用app.ClearCacheFile();就可以清除浏览的缓存了。0.88版本的缓存路径:&quot;C:\\Users\\Administrator\\AppData\\Roaming\\Net Dimension Stu
发表于:2024-02-08 浏览:316 TAG:
【C#】C# Winform 配置文件App.config
目录一、简介二、添加引用&nbsp;三、添加节点1.普通配置节点2.数据源配置节点四、管理类 ConfigHelper.cs1.获取配置节点2.更新或加入配置节点结束一、简介在C#中,配置文件很常用,ASP.NET 和 Winform 名称不同,用法一样,如下图config 文件通常用来存储一些需要修改的数据,比如用户名密码,连接数据库的IP地址等,而不是在代码中写死。有人可能会问,那我自己自定义一个配置文件也行,为什么要用它这个?区别当然有,微软自己封装的读取和写入会更简单一些,你自己封装的,
发表于:2024-01-31 浏览:385 TAG:
【C#】C# Winform 多个程序之间的通信(非Scoket)
效果功能:打开窗体自动连接主程序,并自动添加到列表,可以向子程序群发消息可以向单个程序单独发送消息在退出程序后,添加的程序列表会自动移除一、概述参考:C# Winfrom程序之间通讯_c# sendmessege copydatastruct 返回多个值_熊思宇的博客-CSDN博客在之前我写过 winform 程序与程序之间的通信,但是这个版本有个问题,那就是只能由两个程序进行通信,同时打开多个程序的话,接收方收到的数据就会一模一样,这次发表这个教程,也就是要解决这个问题。归根结底,还是&amp;nbs
发表于:2024-02-03 浏览:304 TAG:
【C#】从零开始用C#写一个桌面应用程序(二)一个表白程序
恶搞表白小程序如何添加按钮,如何添加属性和事件请移步前文。基础操作第一步:新建窗口&nbsp;&nbsp;在工具箱内找到label和button,拖到form上,设置它们的size属性,autosize属性,text属性。第二步:添加事件为了实现我们的效果,需要给三个按钮分别设计点击事件,鼠标移入事件,鼠标点下事件。分别为click,mouseenter,mousedown事件。第三步:实现移动逻辑this获取form对象,clientsize获取实时大小,使用随机数值,设置对应按钮位置。将对应
发表于:2024-01-30 浏览:304 TAG:
【C#】C# Winform 定时清理日志
一、前言在 Winform 开发中经常有这样的需求,在用户执行一些操作不正确时,需要将错误信息反馈给用户,比如:登录密码不正确,无法连接到服务器等,一般常见的用法有两个:1.弹框使用&nbsp;MessageBox.Show(&quot;密码错误&quot;); 这样的方式,弹框后,用户必须点击确定后才能执行下一步操作,给用户的体验并不是特别好。2.在界面中显示错误信息,定时清除如果是输入框,直接用&nbsp;ErrorProvider 控件就行了。如果只是做一些简单的提示信息,那么就要定时清除
发表于:2024-01-31 浏览:307 TAG:
【C#】C# Winform GDI+ 绘图
目录一、概述二、绘图1.画直线2.画矩形3.画圆、圆弧4.画扇形5.画多边形6.绘制字符串7.填充图形结束一、概述Graphics类是GDI+技术的一个基本类。GDI+(Graphics Device Interface)是.NET框架的重要组成部分,提供对二维图形图像和文字排版处理的支持。GDI+相关的类分布在下列命名空间中: System.Drawing:提供了最基本的绘图功能(比如画直线、矩形、椭圆等); System.Drawing.Drawing2D: 提供了高级的二维和矢量绘图功能(
发表于:2024-02-18 浏览:387 TAG:
【C#】C#超急速举例入门-适用有C/C++语言基础
前提编程环境:vs2022电脑系统:win10学习目的:能看懂c#,不纠结各种细节,快速适应开发。入门篇程序结构变量类型类似c语言,不掌握细节,int,float,double都有。输入输出Console.WriteLine(&quot;变量0:{0}&quot;,&nbsp;para0); var&nbsp;a=Console.ReadLine();&nbsp;运算符几乎相同。sizeof();typeof();取地址,取值:&amp;,*;三元运算符: ? :判断类型:is强制转换:as。注
发表于:2024-01-30 浏览:352 TAG:
【C#】C# Winform 日志系统
目录一、效果1.刷新日志效果2.单独日志的分类3.保存日志的样式二、概述三、日志系统API1.字段Debug.IsScrollingDebug.VersionDebug.LogMaxLenDebug.LogTitleDebug.IsConsoleShowLog2.方法Debug.Log(string)Debug.Log(string, params object[])Debug.Logs(string)Debug.Logs(string, params object[])Debug.LogSav
发表于:2024-02-18 浏览:367 TAG:
【C#】Winform解决方案打包成.exe 安装版Windows桌面应用程序
踩了几天的坑,慢慢爬出来了。帮助一下新手友人吧,高手请绕路。IDE Version:Visual Studio 20191.安装Microsoft Visual Studio Installer Project(1)打开Visual Studio 2019,扩展-&gt;管理扩展(2)搜索install,下载图中的扩展即可(我已经安装了,所以没有下载按钮)按照操作安装即可2.打包(1)右键 解决方案-&gt;添加-&gt;新建项目(2)搜索setup-&gt;选择 Setup Project-&amp;
发表于:2024-01-28 浏览:481 TAG: