[前言]
时间紧迫(bushanyanci),在此就不做过多介绍了.
[功能原理]
实现一个自定义进度条,进度条的目的就是作为显示进度的数据可视化控件,具体原理就是填充两种或多种不同颜色比例的矩形框或Path,主要有两种方法实现:
1.重绘/重写控件;
2.自定义控件;
由于本人没有深入研究过重绘/重写,本文主要是自定义控件.
[样式展示]
1.原生样式进度条,百分比、背景和前景颜色可自定义:

2.带图片/图标显示进度进度条,图片/图标、背景、前景、百分比、圆角可自定义

[原生样式]
1.新建用户控件

2.使用OnPaint事件来绘制前景色,只定义了进度比值,报错请引用using System.Drawing;

   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{return PBackgroundColor;}set{PBackgroundColor = value;this.BackColor = PBackgroundColor;}}/// <summary>/// 前景色/// </summary>public Color pForegroundColor{get{return PForegroundColor;}set{PForegroundColor = value;}}/// <summary>/// 当前值/// </summary>public int Val{get{return 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;Console.WriteLine("宽度:{0}", rect.Width);g.FillRectangle(brush, rect);brush.Dispose();g.Dispose();}}

3.使用:同项目内直接拖到使用控件或Form上,不同项目使用生成的dll(在此不介绍了),设置对应的值.

4.使用后样式

[图片/图标样式]
1.新建用户控件,调整好控件尺寸,同上,在此就不上图了.
2.往控件上添加一个PictureBox控件,该控件用于显示进度的图片/图标,尺寸可根据图片/图标大小更改,如果图片固定在此可以先添加图片(添加图片方法为向PictureBox的Image选择资源图片),也可以留属性接口动态添加图片路径;

3.通过自定义控件的Paint事件来填充Path,因项目固定我这里只留了百分比值属性,圆角值/背景/图片等属性在此就不一一封装了.

    public partial class ProgressBarPic : UserControl{public ProgressBarPic(){InitializeComponent();}private int percentageValues = 0;/// <summary>/// 百分比值(0~100)/// </summary>public int PercentageValues{ set {if (value>=0 && value<=100){percentageValues = value;this.Invalidate();}else{percentageValues = 0;}} }/*进度条样式*/private GraphicsPath CreateRound(Rectangle rectangle, int r){int l = 2 * r;// 把圆角矩形分成八段直线、弧的组合,依次加到路径中 GraphicsPath gp = new GraphicsPath();gp.AddLine(new Point(rectangle.X + r, rectangle.Y), new Point(rectangle.Right - r, rectangle.Y));gp.AddArc(new Rectangle(rectangle.Right - l, rectangle.Y, l, l), 270F, 90F);gp.AddLine(new Point(rectangle.Right, rectangle.Y + r), new Point(rectangle.Right, rectangle.Bottom - r));gp.AddArc(new Rectangle(rectangle.Right - l, rectangle.Bottom - l, l, l), 0F, 90F);gp.AddLine(new Point(rectangle.Right - r, rectangle.Bottom), new Point(rectangle.X + r, rectangle.Bottom));gp.AddArc(new Rectangle(rectangle.X, rectangle.Bottom - l, l, l), 90F, 90F);gp.AddLine(new Point(rectangle.X, rectangle.Bottom - r), new Point(rectangle.X, rectangle.Y + r));gp.AddArc(new Rectangle(rectangle.X, rectangle.Y, l, l), 180F, 90F);return gp;}protected override void OnResize(EventArgs eventargs){base.Refresh();}private void ProgressBarPic_Paint(object sender, PaintEventArgs e){Graphics g = e.Graphics;g.Clear(this.BackColor);if (percentageValues == 0){/*画背景*/Rectangle rect = e.ClipRectangle;rect = new Rectangle(43, 21, 530 - 1, 12);g.SmoothingMode = SmoothingMode.AntiAlias;//消除锯齿GraphicsPath round = CreateRound(rect, 5);g.FillPath(new SolidBrush(Color.FromArgb(217, 218, 219)), round);/*画前景进度*///rect = new Rectangle(43, 21, ((530 * percentageValues) / 100) - 1, 12);//g.SmoothingMode = SmoothingMode.AntiAlias;//消除锯齿//round = CreateRound(rect, 5);//g.FillPath(new SolidBrush(Color.FromArgb(25, 176, 132)), round);/*图片位移*/pictureBox1.Location = new Point(((530 * percentageValues) / 100), 0);}else{/*画背景*/Rectangle rect = e.ClipRectangle;rect = new Rectangle(43, 21, 530 - 1, 12);g.SmoothingMode = SmoothingMode.AntiAlias;//消除锯齿GraphicsPath round = CreateRound(rect, 5);g.FillPath(new SolidBrush(Color.FromArgb(217, 218, 219)), round);/*画前景进度*/rect = new Rectangle(43, 21, ((530 * percentageValues) / 100) - 1, 12);g.SmoothingMode = SmoothingMode.AntiAlias;//消除锯齿round = CreateRound(rect, 5);g.FillPath(new SolidBrush(Color.FromArgb(25, 176, 132)), round);/*图片位移*/pictureBox1.Location = new Point(((530 * percentageValues) / 100), 0);}}}

4.使用:通过修改PercentageValues来改变进度值.
5.使用后样式

[后语]
由于工作原因,没有过多时间来优化控件,控件较为粗糙,内部bug可能存在很多,各位朋友同仁如发现异常请轻喷并与我及时联系,以免误导他人.
本章完

Winform自定义控件-进度条/图片图标进度条相关推荐

  1. 进度条图片,进度条素材

  2. Bootstrap4+MySQL前后端综合实训-Day02-AM【Bootstrap4(入门、环境搭建、文字排版、颜色、表格、图片、进度条、折叠、输入框组、模态框)、Font Awesome字体图标】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目   录 Typora语法 Day01-知识回顾 1.前端部分 flex布局 2.Bootstr ...

  3. c#WinForm自定义控件 渐变颜色的进度条

    C#WinForm工具箱自带的ProgressBar进度条控件的颜色默认为绿色,没有属性用来修改,很不方便.所以我们就需要重绘ProgressBar控件来达到我们想要的效果. 完成效果: 实现了进度条 ...

  4. Java渐变进度条_Android ProgressBar自定义图片进度,自定义渐变色进度条

    java.lang.Object ↳android.view.View ↳android.widget.ProgressBar 直接子类 AbsSeekBar 间接子类 RatingBar, Seek ...

  5. android进度条的图标,Android进度条相关应用技巧解析

    Android手机操作系统中有很多功能在实际应用中体现了非常大的作用.比如在这里为大家介绍的Android进度条的实现,就可以帮助大家解决一些相应的问题.那么大家就一起来看看这方面的相关方法吧. ●进 ...

  6. Android可触摸圆形进度条,Android 可滚动圆形进度条 滑块和进度在进度条上面跟着滚动...

    Android 可滚动圆形进度条 滑块和进度在进度条上面跟着滚动.package com.example.test; import android.content.Context; import an ...

  7. Android 之 ProgressDialog用法介绍(矩形进度条 和 圆形 进度条)

    2019独角兽企业重金招聘Python工程师标准>>> 布局文件: <LinearLayout xmlns:android="http://schemas.andro ...

  8. Android自定义半圆进度条 半圆渐变色进度条带指示 半圆开口大小可自由修改

    Android自定义半圆进度条 半圆渐变色进度条带指示 半圆开口大小可自由修改 首先我们来看下效果图 不同的开口大小只需要修改一个参数即可 半圆1: 半圆2: 半圆3: 如果是你想要的效果,就直接滑动 ...

  9. android 动态改变进度条,Android条纹进度条的实现(调整view宽度仿进度条)

    Android条纹进度条的实现(调整view宽度仿进度条) 发布时间:2020-10-03 16:14:24 来源:脚本之家 阅读:89 作者:RustFisher 前言 本文主要给大家介绍了关于An ...

最新文章

  1. 二十七、Redis缓存穿透和雪崩(完)
  2. TypeForwardedTo Attribute ---- 类型传递
  3. 循序渐进DB2.DBA系统管理、运维与应用案例pdf
  4. 【CodeForces - 570A】Elections(模拟,水题)
  5. 蓝牙版本avrcp怎么选_500元内无线蓝牙耳机测评年轻人的第一款廉价蓝牙耳机怎么选?...
  6. RFID 射频 RFID工作流程 自动识别技术 工作频段 短距离无线通信技术
  7. 层次分析法之matlab
  8. 经典OA办公协同管理-原型UI设计-制作
  9. python_mysql
  10. ubuntu终端浏览文件夹
  11. 智能优化算法——遗传算法(C语言实现)
  12. 案例效果:实现移动端端轮播图效果
  13. jdk文档下载(html格式)
  14. DPDK支持的硬件:CPU、网卡NIC、加密引擎、基带加速器
  15. 基于上下文的业务流建模法(三)
  16. 基于Python实现Jacobi迭代法、Gauss-Seidel迭代法和SOR法方程组(三)
  17. 计算机显卡维修,显卡的各种故障维修方法
  18. 网络版计算机化系统3q认证,高效液相液色仪3Q认证服务|气相色谱仪3Q认证确认服务...
  19. 京东黑号了怎么变白(目前相对有效的洗白方法)
  20. USB2.0实际传输速度

热门文章

  1. 利用动态规划解决实际问题之多次兑换获取最大外汇收益
  2. proguard混淆程序过程记录
  3. python 可视化 皮肤_会Python了不起吗?是的,简直开挂!
  4. docker flannel实践
  5. 使用myheritage实现静态照片变成视频
  6. java游戏赏金猎人,【图片】[0.65.1a] Starsector+ Vanilla Enhancement Mod 新版本持续更新【远行星号吧】_百度贴吧...
  7. 消费者信赖的降糖好物分享:育润胰力佳奶粉
  8. @Target,@Retention,@Documented 注释的作用
  9. 网易云音乐的消息队列改造,到底做了啥?
  10. 广东工业大学文远知行杯新生程序设计竞赛(重现赛)G-我最好的朋友【博弈(必败点的判断,胜败转化)】