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();
}

 

posted @ 2020-06-11 14:22  朝阳的向日葵  阅读(5149)  评论(0编辑  收藏  举报