参考: https://blog.csdn.net/zhuimengshizhe87/article/details/20640157

WinForm中显示进度条百分比有多种方式:

1. 添加 Label 或者 TextBox 等空间在 ProgressBar 上,然后设置前面的空间背景色为透明。但是WinForm 中不支持设置TextBox空间的背景色为透明色;

2.自定义ProgressBar,调用微软提供的 DrawString() 函数来实现设置进度百分比信息。详细代码如下:

(备注: 如果在UI线程之外更新进度条信息,需要使用委托的方式(多线程情况下必须使用))

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); var progressBar = new MyProgressBar()
{
Location = new Point(20, Bottom - 150),
Size = new Size(Width - 60, 50),
Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom
};
this.Controls.Add(progressBar); var timer = new Timer { Interval = 150 };
timer.Tick += (s, e) => progressBar.Value = progressBar.Value % 100 + 1;
timer.Start();
} private void Form1_Load(object sender, EventArgs e)
{
}
} public class MyProgressBar : ProgressBar
{
public MyProgressBar()
{
SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
} protected override void OnPaint(PaintEventArgs e)
{
Rectangle rect = ClientRectangle;
Graphics g = e.Graphics; ProgressBarRenderer.DrawHorizontalBar(g, rect);
rect.Inflate(-3, -3);
if (Value > 0)
{
var clip = new Rectangle(rect.X, rect.Y, (int)((float)Value / Maximum * rect.Width), rect.Height);
ProgressBarRenderer.DrawHorizontalChunks(g, clip);
} string text = string.Format("{0}%", Value * 100 / Maximum); ;
using (var font = new Font(FontFamily.GenericSerif, 20))
{
SizeF sz = g.MeasureString(text, font);
var location = new PointF(rect.Width / 2 - sz.Width / 2, rect.Height / 2 - sz.Height / 2 + 2);
g.DrawString(text, font, Brushes.Red, location);
}
}
}
}

备注: 以下属性的设置可以减少窗口数据更新(重新绘制)的闪烁。

        public MyProgressBar()
{
SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
}
ControlStyles.OptimizedDoubleBuffer 和 ControlStyles.AllPaintingInWmPaint 用于减少窗口显示的闪烁。必须配合 ControlStyles.UserPaint 为 true。

WinForm 进度条显示进度百分比的更多相关文章

  1. 【Winform】使用BackgroundWorker控制进度条显示进度

    许多开发者看见一些软件有进度条显示进度,自己想弄,项目建好后发现并没有自己想象中的那么简单...看了网上很多教程后,写了一个小Demo供网友们参考~~,Demo的网址:http://pan.baidu ...

  2. Extjs 使用fileupload插件上传文件 带进度条显示

    一.首先我们看看官方给出的插件的解释: 一个文件上传表单项具有自定义的样式,并且可以控制按钮的文本和 像文本表单的空文本类似的其他特性. 它使用一个隐藏的文件输入元素,并在用户选择文件后 在form提 ...

  3. Ajax上传文件进度条显示

    要实现进度条的显示,就要知道两个参数,上传的大小和总文件的大小 html5提供了一个上传过程事件,在上传过程中不断触发,然后用已上传的大 小/总大小,计算上传的百分比,然后用这个百分比控制div框的显 ...

  4. js 文件异步上传 显示进度条 显示上传速度 预览文件

    通常文件异步提交有几个关键 1.支持拖拽放入文件.2.限制文件格式.3.预览图片文件.4.上传进度,速度等,上传途中取消上传.5.数据与文件同时上传 现在开始笔记: 需要一个最基础的元素<inp ...

  5. Qt flash_eraseall nandwrite 进度条显示擦除、烧录

    /***************************************************************************** * Qt flash_eraseall n ...

  6. MFC读写.txt文件时进度条显示实时进度

    整体实现方式:先获得文件长度,然后用每次读取的长度,计算出完成的百分比,用百分比的值设置进度条. 一.MFC进度条 Progress Control 相关函数 1. create() --创建Prog ...

  7. 【Android】读取sdcard卡上的全部图片而且显示,读取的过程有进度条显示

    尽管以下的app还没有做到快图浏览.ES文件浏览器的水平,遇到大sdcard还是会存在读取过久.内存溢出等问题,可是基本思想是这种. 例如以下图.在sdcard卡上有4张图片, 打开app,则会吧sd ...

  8. Android——音乐播放器完善——进度条显示当前播放进度,加可拖动进度条(未待解决完问题)

    效果: 问题:可拖动进度条随进度条移动时,会致使音乐卡顿(待解决) xml <?xml version="1.0" encoding="utf-8"?&g ...

  9. Android中ProgressBar的使用-通过Handler与Message实现进度条显示

    场景 进度条效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改为 ...

  10. struts2:上传多个文件时实现带进度条、进度详细信息的示范

    上一篇文章讲了上传单个文件与上传多个文件(属性驱动)的例子.本例是上传多个文件(属性驱动),并且显示进度条.进度详细信息的示范. 在文件上传选择界面,允许用户增加.删除选择的文件,且只能上传指定类型的 ...

随机推荐

  1. python拉取grafana监控图形

    python拉取grafana监控图形 python通过grafana提供的api接口拉取grafana监控图形并保存至word文档生成日报发送邮件 前置条件: 1.grafana平台需要安装graf ...

  2. Python 在同一/或不同PDF之间复制页面

    操作PDF文档时,复制其中的指定页面可以帮助我们从PDF文件中提取特定信息,如文本.图表或数据等,以便在其他文档中使用.复制PDF页面也可以实现在不同文件中提取页面,以创建一个新的综合文档.本文将介绍 ...

  3. cento 申请ssl证书笔记

    如果您的Certbot工具没有内置的Nginx插件,您可以尝试以下方法来申请证书并配置Nginx服务器: 安装Certbot的Nginx插件: sudo yum install certbot-ngi ...

  4. 一个 tomcat 下部署多个项目(超细另类版)

    前言:网上大佬们的都是一个webapps下面部署多个项目,咱们今天来点不一样的,另一种思路则是,多个webapps,每个webapps下面运行一个项目,不知如何本地部署的可以去看看我上一篇随笔 具体步 ...

  5. git代码同步,代码同步到码云中

    首先在需要同步的代码根目录下打开终端,这里是在vscode的终端操作的,也可以用cmd 进入到项目目录,输入git status查看代码同步状态, 提示内红色的都是有变化的代码 git status ...

  6. Flutter问题 Flutter MissingPluginException(No implementation found for method xxx on channel xxx)

    问题如题 有时候项目跑着跑着突然控制台就报了这个错,用hot restart也没有用,问题的本质是plugin没有找到,这时候有两种方法 flutter clean,会将依赖清除,这时候再重新pub ...

  7. 关于 Span 的一切:探索新的 .NET 明星: 1 Span<T> 是什么?

    关于 Span 的一切:探索新的 .NET 明星 https://docs.microsoft.com/en-us/archive/msdn-magazine/2018/january/csharp- ...

  8. 开源产品测评之 SQL 上线能力

    背景 近期,我司准备引入一款 SQL 审核产品来供内部流程使用,解决目前 SQL 人工上线的流程管控问题,目标是对业内的开源产品进行调研,选型一款作为落地方案,后期如果内部有需求可能会进行二次开发.我 ...

  9. X-Frame-Options

    X-Frame-Options头主要是为了防止站点被别人劫持,iframe引入 nginx配置形式: add_header X-Frame-Options ALLOWALL; #允许所有域名ifram ...

  10. Qt编写可视化大屏电子看板系统16-标准柱状图

    一.前言 标准柱状图是大屏系统中最常用的一种展示数据效果图,提供不同的柱子显示数据值,在QCustomPlot的基础上拓展了顶部显示对应的值,不同的柱子不同的颜色,同时还可以调用内置的触发报警颜色的机 ...