zoukankan      html  css  js  c++  java
  • 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();
    }
  • 相关阅读:
    CSU software 新手练习1 解题报告
    HDU 4067 Random Maze
    HDU 1853 Cyclic Tour
    Notepad++搭配MinGW编译运行C,C++程序
    ACM POJ3299-Humidex
    开始正常的做题了=。=
    写在杭电热身赛2之后
    大二了~
    Vim 学习笔记之cvim hot key
    The 10th Zhejiang Provincial Collegiate Programming Contest
  • 原文地址:https://www.cnblogs.com/zknublx/p/13092995.html
Copyright © 2011-2022 走看看