WinForm (ProgressBar)进度条显示百分比

先给大家看一下效果,如下图

ProgressBar控件.net  目前没有带百分比显示的,要我们自己做一个带显示百分比的控件

如转载请保留原创地址 http://www.luofenming.com/show.aspx?id=ART2018083000001

在这里 长话短说  说重点的

以下是自己绘制带百分比的ProgressBar的核心代码

using System.Drawing;
using System.Windows.Forms;

namespace 进度条显示百分比
{
    public class MyProgressBar: ProgressBar//继承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, 9))
            {
                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.Black, location);
            }
        }
    }
}


也可以通过代码实例化调用控件,以下是通过代码实例化调用控件核心代码

        private void button1_Click(object sender, EventArgs e)
        {
            ProgressTest();
        }

        private void ProgressTest()
        {
            //更多好的实例  请防问www.luofenming.com
            ProgressBar progressBar = new MyProgressBar();
            //progressBar.Dock = DockStyle.Fill;//设置实例化的长宽跟父类一样
            progressBar.Width = 200;//设置实例化的 宽度
            progressBar.Height = 30;
            panel1.Controls.Add(progressBar);//panel里面添加实例化的控件

            //以下是实例下一个Timer  每150毫秒百分比加1
            Timer timer = new Timer { Interval = 150 };
            timer.Tick += (s, e) => progressBar.Value = progressBar.Value % 100 + 1;
            timer.Tick += (s, e) => myProgressBar1.Value = myProgressBar1.Value % 100 + 1;
            timer.Start();
        }

源码下载地址  https://pan.baidu.com/s/1QRNSlXX78WakbCtixq3JTw

评论