近段时间公司一个项目需要做一项功能,显示一个操作的进度条。按照客户的要求需要设置特定的前景及背景颜色,但是c#工具自带的控件progressBar不支持属性里面直接设置前景及背景颜色,并且不能显示进度的百分比。于是百度了一通加上自己的研究探索,总算是把客户要求的功能做出来了,这里和大家分享一下,共同探讨。

下面说说该功能的具体实现:
一、改变进度条的颜色
因属性里面不能直接设置,首先考虑的是在Prograssbar上面放一个label,然后设置label的Parent为prograssbar,这种方法确实实现了颜色的改变,但是进度条看不到了,该方法以失败告终。然后一通百度发现可以通过重写Prograssbar的OnPaint方法来解决,代码如下:

public class MyProgressBar : ProgressBar{public MyProgressBar(){base.SetStyle(ControlStyles.UserPaint, true);}//重写OnPaint方法protected override void OnPaint(PaintEventArgs e){SolidBrush brush = null;Rectangle bounds = new Rectangle(0, 0, base.Width, base.Height);//...//e.Graphics.FillRectangle(new SolidBrush(this.BackColor), 1, 1, bounds.Width, bounds.Height);bounds.Height -= 4;bounds.Width = ((int)(bounds.Width * (((double)base.Value) / ((double)base.Maximum)))) - 4;brush = new SolidBrush(Color.Coral);e.Graphics.FillRectangle(brush, 2, 2, bounds.Width, bounds.Height);}}

2、然后设置设置自定义的MyPrograssbar为拖到界面的Prograssbar1的子控件,然后继续绘制可以看到效果,代码如下:

        private void button2_Click(object sender, EventArgs e){MyProgressBar cp = new MyProgressBar();cp.Parent = progressBar1;cp.Minimum = 0;//进度条显示最小值cp.Maximum = 100;//进度条显示最大值cp.Width = progressBar1.Width;cp.Height = progressBar1.Height;cp.BackColor = Color.BlueViolet;//Label l = new Label();//l.Parent = cp;//l.BackColor = Color.Transparent;//l.ForeColor = Color.Red;//l.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;//l.Width = cp.Width;//l.Height = cp.Height;for (int i = 0; i < 100; i++){Thread.Sleep(100);cp.Value = i + 1;textEdit1.Text = i.ToString();textEdit2.Text = (i + 2).ToString();//SetProcessValue("aa", i + 1);//Font font = new Font("宋体", (float)16, FontStyle.Regular);//PointF pt = new PointF(cp.Width / 2 - 10, cp.Height / 2 - 13);//cp.CreateGraphics().DrawString(i.ToString(), font, Brushes.Red, pt);//l.Text = i.ToString();Application.DoEvents();}}

运行效果如下:

这样进度条的颜色就可以实现了,其实就是重新绘制就可以了,这个控件的颜色在基础的控件里面也就是画上去的,只是他做的不是很强大,不支持进度条颜色的改变。

二、这里实现了进度条颜色的改变后再来考虑进度百分比的加入。因为有前面的基础,这里首先想到的就是给他画上去,代码如下:

            Font font = new Font("宋体", (float)16, FontStyle.Regular);PointF pt = new PointF(cp.Width / 2 - 10, cp.Height / 2 - 13);cp.CreateGraphics().DrawString(i.ToString(), font, Brushes.Red, pt);

效果如下图:


这里可以实现,进度显示,但是到后面发现闪烁特别严重,到后面直接就看不到了,想了很多办法始终无法解决这个问题,但是那几个记录进度的文本框却没什么影响,于是灵机一动想到既然控件不会闪烁那么可以尝试用lable记录进度看看效果,于是修改代码如下:

         private void button2_Click(object sender, EventArgs e){MyProgressBar cp = new MyProgressBar();cp.Parent = progressBar1;cp.Minimum = 0;//进度条显示最小值cp.Maximum = 100;//进度条显示最大值cp.Width = progressBar1.Width;cp.Height = progressBar1.Height;cp.BackColor = Color.BlueViolet;Label l = new Label();l.Parent = cp;l.BackColor = Color.Transparent;l.ForeColor = Color.Red;l.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;l.Width = cp.Width;l.Height = cp.Height;for (int i = 0; i < 100; i++){Thread.Sleep(100);cp.Value = i + 1;textEdit1.Text = i.ToString();textEdit2.Text = (i + 2).ToString();//SetProcessValue("aa", i + 1);//Font font = new Font("宋体", (float)16, FontStyle.Regular);//PointF pt = new PointF(cp.Width / 2 - 10, cp.Height / 2 - 13);//cp.CreateGraphics().DrawString(i.ToString(), font, Brushes.Red, pt);l.Text = i.ToString();Application.DoEvents();}}

运行程序发现问题得到完美解决,效过如下图:


代码附上,相互交流。
https://download.csdn.net/download/czcl123/10832214
————————————————
版权声明:本文为CSDN博主「czcl123」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/czcl123/article/details/72782961

c# progressBar进度条改变颜色及显示进度数字相关推荐

  1. 自定义Seebar进度条、进度条背景颜色,更换进度滑动icon。

    1.先上效果图 2.自定义Seebar进度条.进度条背景颜色 在drawable中新建文件SeeBar.xml,如下 <layer-list xmlns:android="http:/ ...

  2. php进度条如何计算,投票最后显示进度条的百分比怎么算

    我自己写的一个投票结果显示,其中设定票数最多的那个进度条为100%.public class voteresult : System.Web.UI.Page { protected System.We ...

  3. echarts 仪表盘刻度线随进度条改变颜色

    示例图 option = {series: [// 最小{type: 'gauge',radius: '15%', // 位置center: ['50%', '60%'],min: 0,max: 10 ...

  4. 进度条上的起伏_进度条(ProgressBar)的功能与用法

    进度条也是UI界面中一种非常实用的组件,通常用于向用户显示某个耗时操作完成的的百分比.进度条可以动态的显示进度,因此避免长时间的执行某个耗时的操作,让用户感觉程序失去了响应,从而更好的提高用户界面的友 ...

  5. java 歌词颜色变色_Axure教程:音乐播放器中,带时间的进度条/歌词颜色变化/旋转元件...

    原标题:Axure教程:音乐播放器中,带时间的进度条/歌词颜色变化/旋转元件 本文以QQ音乐为例,实现了带时间的进度条.歌词颜色变化.唱片旋转.暂停播放等原型交互. 一.效果展示 体验地址:https ...

  6. android 水平进度条 自定义颜色,android 水平进度条的颜色设置

    首先在布局文件中定义如下: 再在drawable目录下新增progressbar.xml文件,可以设置默认背景色和进度条的颜色(值得一提的是支持渐变色) 内容如下:

  7. Bootstrap进度条的颜色

    进度条的颜色 除了默认的蓝色进度条之外,Bootstrap还为进度条提供了一组情景样式类,包括 .progress-bar-success..progress-bar-info..progress-b ...

  8. android 进度条高度,转!Android进度条修改教程(颜色,高度)

    android进度条大致分为两种,水平进度条和圆形进度条.我们一般需要改的就是水平进度条,因为这个不是替换图片可以做到的,所以发下此教程. 首先,准备工作就是建立java运行环境,寻找一个顺手的反编译 ...

  9. java进度条字体颜色_Java Swing:进度条字体颜色修改

    最近无聊想玩一玩gui,在自定义进度条时发现了一个小问题,进度条的背景颜色和前景颜色都可以使用JProgressBar本身自带的方法修改,但是前面的字体颜色却修改不了,造成修改背景颜色后字体的颜色会和 ...

最新文章

  1. 在Synaptic Package Manager 加载USB 接口的CD-ROM
  2. win10光驱位连接计算机,windows10不能识别光驱位硬盘
  3. Python | 使用matplotlib.pyplot创建条形图
  4. php知识点_PHP那些琐碎的知识点(整理)
  5. Delphi中一些DLL的运用。
  6. [Misc]IE浏览器真正全屏幕操作技巧
  7. 化学实验中计算机技术的应用,数字化实验在化学教学中的应用
  8. get 和 post请求的区别
  9. 2020山东大学软件测试期末试题
  10. w7忘记计算机密码,win7系统忘记电脑开机密码的解决方法
  11. 【Java】 类和对象
  12. The eighth of Word-Day
  13. electron安装报错: Electron failed to install correctly…的解决方案
  14. EPS概念及EPC相关网元
  15. 炮兵阵地(状压dp)
  16. CVPR 2022 部分行人重识别
  17. 【DirectX11】【学习笔记(10)】混合
  18. 火焰纹章核心功能的实现
  19. 计算机快捷键40个,如何快速记住计算机快捷键
  20. html5视频标签video画中画几个API

热门文章

  1. Orleans 分布式 计算框架-Actor模型的一种实现
  2. LUBUNTU20.04.2 安装输入法
  3. swiper 上下居中
  4. 关于wxid转微信号
  5. Mysql数据库中的各种锁
  6. 正则表达式周二挑战赛 第一周
  7. v-echarts的介绍及使用
  8. int,long int,short int所占字节
  9. 记录一下CentOS-8成功安装显卡驱动的过程
  10. 小技巧--Tips--如何显示有纹理代码块背景