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();
    }
  • 相关阅读:
    点灯
    流水灯
    <<晨间日记>>要点
    PL/SQL 函数学习 Start with...Connect By
    FTP Put步骤回顾
    ORA16038,ORA19809,ORA00312无法归档的解决方法
    Emacs for windows
    ORA01578,ORA01115,ORA01110 ORACLE 数据块损坏
    MySQL存储过程的调优过程
    ORA01110 数据文件日志文件丢失打不开数据库
  • 原文地址:https://www.cnblogs.com/zknublx/p/13092995.html
Copyright © 2011-2022 走看看