当前位置: 首页 > news >正文

[C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法

【创建圆形进度条流程】


在C# WinForms应用程序中创建一个圆形进度条(通常用作仪表盘的显示)可以通过多种方式实现。下面是一个简单的例子,演示如何使用System.Drawing命名空间中的图形绘制功能来绘制一个基本的圆形进度条。

首先,在你的WinForms项目中添加一个Panel控件作为进度条的容器。然后,可以通过重写Panel的OnPaint事件来处理绘图逻辑。

以下是一个简单的圆形进度条控件的示例代码:

csharp
using System;  
using System.Drawing;  
using System.Windows.Forms;  
  
public class CircularProgressBar : Panel  
{  
    private int _progress;  
  
    public CircularProgressBar()  
    {  
        this.DoubleBuffered = true; // 双缓冲以减少闪烁  
        this.SetStyle(ControlStyles.ResizeRedraw | ControlStyles.OptimizedDoubleBuffer, true);  
    }  
  
    public int Progress  
    {  
        get { return _progress; }  
        set  
        {  
            if (value < 0) value = 0;  
            if (value > 100) value = 100;  
  
            _progress = value;  
            Invalidate(); // 触发重绘  
        }  
    }  
  
    protected override void OnPaint(PaintEventArgs e)  
    {  
        base.OnPaint(e);  
  
        int diameter = Math.Min(Width, Height) - 1; // 直径等于宽度和高度的最小值减一  
        int radius = diameter / 2; // 半径等于直径的一半  
        int centerX = Width / 2; // 圆心X坐标  
        int centerY = Height / 2; // 圆心Y坐标  
  
        // 绘制进度条背景  
        using (Pen backgroundPen = new Pen(Color.LightGray, 10))  
        {  
            e.Graphics.DrawEllipse(backgroundPen, centerX - radius, centerY - radius, diameter, diameter);  
        }  
  
        // 绘制进度  
        int sweepAngle = 360 * Progress / 100; // 计算扫过的角度  
        using (Pen progressPen = new Pen(Color.Blue, 10))  
        {  
            e.Graphics.DrawArc(progressPen, centerX - radius, centerY - radius, diameter, diameter, -90, sweepAngle);  
        }  
  
        // 绘制进度文本(可选)  
        using (Font textFont = new Font("Arial", 12, FontStyle.Bold))  
        using (Brush textBrush = new SolidBrush(Color.Black))  
        {  
            string text = Progress + "%";  
            e.Graphics.DrawString(text, textFont, textBrush, centerX - e.Graphics.MeasureString(text, textFont).Width / 2, centerY - e.Graphics.MeasureString(text, textFont).Height / 2);  
        }  
    }  
}
然后,你可以在你的WinForms窗体上实例化并使用这个CircularProgressBar控件:

csharp
public partial class MainForm : Form  
{  
    private CircularProgressBar circularProgressBar;  
  
    public MainForm()  
    {  
        InitializeComponent();  
  
        circularProgressBar = new CircularProgressBar();  
        circularProgressBar.Dock = DockStyle.Fill;  
        circularProgressBar.Progress = 50; // 设置初始进度为50%  
        this.Controls.Add(circularProgressBar);  
  
        // 你可以通过定时器或其他方式来动态改变进度  
        // 例如:  
        // System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();  
        // timer.Interval = 1000; // 1秒  
        // timer.Tick += (sender, e) => {  
        //     circularProgressBar.Progress = (circularProgressBar.Progress + 1) % 100;  
        // };  
        // timer.Start();  
    }  
}
请注意,这只是一个简单的示例,你可以根据自己的需求调整样式、颜色、字体等属性,甚至添加动画效果。如果你需要更复杂的仪表盘控件,可能需要考虑使用第三方库或自定义绘制更复杂的图形元素。

【圆形进度条控件】

圆形进度条控件制作是是否考验自己编程能力如果有开源免费的圆形进度条就很好了,偶然发现一个好用圆形进度条控件,支持圆形、圆环等指定圆形进度条创建,使用十分简单就跟C#里面trackbar使用方法一样,只是简单调用即可。效果如下:

【测试环境】

vs2019,netframwork4.7.2

【源码演示下载地址】 

https://download.csdn.net/download/FL1623863129/88824751

相关文章:

  • Rust语言之哈希表
  • Gitlab和Jenkins集成 实现CI (二)
  • 机器学习系列——(十四)正则化回归
  • Java多线程编程中的异常处理策略
  • C语言如何输⼊字符数组?
  • 嵌入式Qt Qt 中的坐标系统
  • 代码随想录算法——数组
  • 【UE 游戏编程基础知识】
  • element-ui解决上传文件时需要携带请求数据的问题
  • 用Python来实现2024年春晚刘谦魔术
  • 操作系统面试问题——说一下什么是零拷贝?
  • 蓝桥杯刷题--python-4
  • 域名解析大概过程笔记
  • Dubbo集成Zookeeper embbed模式
  • 屏幕字体种类介绍
  • 【css3】浏览器内核及其兼容性
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 2017 年终总结 —— 在路上
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Asm.js的简单介绍
  • css布局,左右固定中间自适应实现
  • Fastjson的基本使用方法大全
  • Go 语言编译器的 //go: 详解
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • JavaScript函数式编程(一)
  • leetcode98. Validate Binary Search Tree
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Otto开发初探——微服务依赖管理新利器
  • Spring Cloud中负载均衡器概览
  • vue的全局变量和全局拦截请求器
  • webpack项目中使用grunt监听文件变动自动打包编译
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 测试开发系类之接口自动化测试
  • 看域名解析域名安全对SEO的影响
  • 每天一个设计模式之命令模式
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 如何学习JavaEE,项目又该如何做?
  • 使用Swoole加速Laravel(正式环境中)
  • 使用权重正则化较少模型过拟合
  • MyCAT水平分库
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • # 数据结构
  • #Linux(Source Insight安装及工程建立)
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • **python多态
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET LINQ 通常分 Syntax Query 和Syntax Method