C#【必备技能篇】使用GDI绘制进度条的代码实现

news2024/11/14 10:28:27

文章目录

  • 一、使用“用户控件”生成圆环进度条的dll
    • 1、使用VS2019新建项目(类库)
    • 2、添加用户控件
    • 3 、用户控件PercentStar.cs源码编写
  • 二、引用dll,在Winform中代码实现
    • 1、新建Windows窗体应用(.NET Framework)
    • 2、添加引用(上边生成的GDIPercent.dll)
    • 3、将dll添加到工具箱【两种方法】
      • 方法一:鼠标选中GDIPercent.dll,直接拖放到工具栏【可以先添加个选项卡Myself,方便管理】
      • 方法二:通过添加 .NET Framework组件 来添加
    • 4、源码
    • 5、运行效果
    • 6、补充【变换圆环进度条颜色】

一、使用“用户控件”生成圆环进度条的dll

1、使用VS2019新建项目(类库)

在这里插入图片描述在这里插入图片描述

2、添加用户控件

在这里插入图片描述
在这里插入图片描述

3 、用户控件PercentStar.cs源码编写

PercentStar.cs源码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GDIPercent
{
    public partial class PercentStar : UserControl
    {
        public PercentStar()
        {
            InitializeComponent();
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            // 获取画布
            Graphics graphics = e.Graphics;

            //消除锯齿
            graphics.SmoothingMode = SmoothingMode.AntiAlias;
            //文字显示效果
            graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
            //插补模式
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            //图片呈现质量
            graphics.CompositingQuality = CompositingQuality.HighQuality;

            // 绘制底圆
            SolidBrush brush1 = new SolidBrush(Color.FromArgb(93, 107, 153));
            Rectangle rectangle1 = new Rectangle(1, 1, this.Width - 2, this.Height - 2);
            graphics.FillEllipse(brush1, rectangle1);

            //绘制扇形
            Rectangle rectangle2 = new Rectangle(1, 1, this.Width - 2, this.Height - 2);
            LinearGradientBrush brush2 = new LinearGradientBrush(rectangle2, Color.Blue, Color.Red, 150.0f, true);【绘制的圆环,随着进度条值增大,逐渐由蓝变为红色】
            //LinearGradientBrush brush2 = new LinearGradientBrush(rectangle2, Color.White, Color.Green, 150.0f, true);【绘制的圆环,随着进度条值增大,逐渐由白色变为绿色】
            this.PercentVal = (ActureValue / MaxValue) * 100;
            graphics.FillPie(brush2, rectangle2, -90, (ActureValue / MaxValue) * 360f);

            //绘制上圆
            SolidBrush solidBrushElipse = new SolidBrush(this.BackColor);
            Rectangle rectangle3 = new Rectangle(15, 15, this.Width - 30, this.Height - 30);
            graphics.FillEllipse(solidBrushElipse, rectangle3);

            //绘制文字
            Font font = new Font("华为宋体", 14);
            PointF point = new PointF(((float)this.Width) / 2.0f - 27, ((float)this.Height) / 2.0f - 10);
            graphics.DrawString(this.PercentVal.ToString("0.0") + "%", font, Brushes.Coral, point);
        }

        //最大值
        private float maxValue = 100;
        public float MaxValue
        {
            get { return maxValue; }
            set
            {
                maxValue = value;
                this.Invalidate();
            }
        }

        //实际值
        private float actureValue = 60;
        public float ActureValue
        {
            get { return actureValue; }
            set
            {
                actureValue = value;
                this.Invalidate();
            }
        }

        //文字显示值
        private float PercentVal = 0;

    }
}

在这里插入图片描述
在这里插入图片描述

二、引用dll,在Winform中代码实现

1、新建Windows窗体应用(.NET Framework)

在这里插入图片描述

2、添加引用(上边生成的GDIPercent.dll)

我一般放在当前项目的Debug文件夹下:
在这里插入图片描述

3、将dll添加到工具箱【两种方法】

方法一:鼠标选中GDIPercent.dll,直接拖放到工具栏【可以先添加个选项卡Myself,方便管理】

1、添加选项卡Myself
在这里插入图片描述
2、拖放GDIPercent.dll到Myself中
在这里插入图片描述

方法二:通过添加 .NET Framework组件 来添加

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、源码

在这里插入图片描述在这里插入图片描述

using System;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (percentStar1.ActureValue == 100)
            {
                percentStar1.ActureValue = 0;
                return;
            }
            percentStar1.ActureValue += 1;
        }
    }
}

5、运行效果

请添加图片描述

6、补充【变换圆环进度条颜色】

一、3的代码改为下边时,显示如下的效果:

LinearGradientBrush brush2 = new LinearGradientBrush(rectangle2, Color.White, Color.Green, 150.0f, true);【绘制的圆环,随着进度条值增大,逐渐由白色变为绿色】

在这里插入图片描述

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

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

相关文章

Java项目:ssm房屋租赁管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为管理员与租户2种角色: 管理员主要功能包括: 登录、查看房源信息、添加房源、查看租赁情况、合同查看、看房申…

皓量科技入选《中国数字营销生态图2022版》4大赛道!

11月28日,由中国商务广告协会数字营销专业委员会、虎啸奖组委会及秒针营销科学院三方合作出版的《中国数字营销生态图2022版》正式发布(以下简称生态图)。皓量科技凭借多年深耕程序化广告领域的实力与经验,在全行业服务商的征集调…

Codeforces Round #752 (Div. 1) B. Moderate Modular Mode

翻译: 谁有两个偶数𝑥和𝑦。帮助他找到一个整数𝑛,使1≤𝑛≤2⋅1018,且𝑛mod𝑥𝑦mod𝑛。这里,𝑎mod𝑏表示&am…

夯实算法-整数转罗马数字

题目:LeetCodeLeetCode 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D …

Linux操作系统~匿名管道和命名管道的使用及其原理分析

目录 1.匿名管道 (1).匿名管道的原理 (2).pipe接口的使用 如果只写不读(求管道的大小) (3).匿名管道五个特点 (4).匿名管道的四种情况 3.命名管道 &a…

世界杯之用Java实现随机胜平负

一、本章猜测随机数首先需要用到Scanner语句,对用户需要几组胜平负数量进行猜测,说动用到几组肯定要用到for循环了,还有要实现随机,就需要用到Math方法,进行随机抽取。 1.Scanner 首先使用Scanner语句抓取用户…

MATLAB算法实战应用案例精讲-【工具篇】运筹优化工具OR-TOOLS(补充篇)(附实战案例及代码实现)

前言 本文为【工具篇】运筹优化工具OR-TOOLS(附实战案例及代码实现)的补充篇。 OR-Tools是一个用于优化的开源软件套件,用于解决车辆路径、流程、整数和线性规划以及约束编程等世界上最棘手的问题。同时OR-Tools提供了C++,Python,Java,.NET的接口,同时提供统一接口封装来…

为你揭秘拼购为什么是破产老板手中的最后一根稻草?

拼购,已经成为了电商平台自主传播的一种营销活动,通过拼团可以促成更多的成交量,但拼团也不是这样简单的放在那里就能有客户进来参与,其中还有很多细节上面的地方需要我们好好探究。这个拼购模式和我们之前见过的拼多多拼团、拼购…

什么蓝牙耳机适合realme手机?适合realme手机的高端蓝牙耳机推荐

根据网络调查数据显示,市面上的耳机需求量在不断增加,随着智能手机的普及,耳机作为炙手可热的产品,尤其是网易云、全民K歌,直播的流行,消费者对于耳机的需求不仅仅是听歌了,有线耳机也逐渐被无线…

【Matplotlib绘制图像大全】(五):饼图

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

风靡互联网关键词 Web3.0 | 区块链 | 比特币 | 元宇宙……

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Web web是互联网的总称,全称为World Wide Web,缩写WWW ,即全球广域网,也称为万维网,它是一种基于超文本和H…

007.复原 IP 地址

1.题目链接: 93. 复原 IP 地址 2.解题思路: 2.1.题目要求: 给定一串只包含数字的字符串s,返回所有让 s 构成 有效IP地址 的数字组合。 有IP地址: 4个 [0,255] 范围内的数字 组成,并且整数之间用 " …

绿源:“老大哥”冲刺IPO,新的故事如何讲?

又一家老牌电动两轮车企业“开”向了资本市场。 11月22日,绿源集团控股(开曼)有限公司(以下简称“绿源集团”)正式向港交所递交招股说明书,拟主板挂牌上市,中信建设国际担任独家保荐人&#xf…

ctfshow node.js专题

文章目录web334web335web336web337web338web339web340web341web342、web343web334 给了附件,然后进入后发现是一个登录框。 在附件中知道了账号密码,但是却无法登录。 先看user从哪里获取: var user findUser(req.body.username, req.bod…

虹科案例 | 订单自动分拣效率居然这么高?

Background 背景 过去,一家自动仓储和检索系统(AS/RS)梭子解决方案的制造商依靠车轮编码器来指示梭子沿轨道的位置。虽然这种解决方案已经使用了多年,也将继续使用,但它可能容易出现定位错误,这通常是由车…

[附源码]Python计算机毕业设计SSM考勤管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Kotlin高仿微信-第35篇-支付-二维码收款(二维码)

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点,包括:注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

【python可视化】python编码规范、标准库与扩展库对象的导入与使用

🙋‍ 哈喽大家好,本次是python数据分析、挖掘与可视化专栏第一期 ⭐本期内容:python编码规范、标准库与扩展库对象的导入与使用 🏆系列专栏:Python数据分析、挖掘与可视化 👍欢迎大佬指正,一起学…

嵌入式分享合集115

一、数字万用表电压、电流、电阻、电容、频率、电池、二极管等测量方法 数字万用表可用来测量直流和交流电压、直流和交流电流、电阻、电容、频率、电池、二极管等等。整机电路设计以大规模集成电路双积分A/D转换器为核心,并配以全过程过载保护电路,使之…

动态改变列数做分页

【问题】 My question is: How can I prepare template which will receive various number of columns in such way, that if they won’t fit to page, next columns would be printed on a second page. For example If I have 10 columns, but only 6 fit to the page 1,…