zoukankan      html  css  js  c++  java
  • 功能增强的进度条控件(源码)

    最近青岛微软开发者俱乐部 www.qddn.net上有位网友希望得到能改变颜色的进度条,正好我也在做一套.net的通用组件,就把它写出来了,因为比较简单,也没有多少技术含量,就把它帖出来,希望给别的朋友一点帮助

    这个进度条控件,除了具有普通进度条的功能以外,还具有如下功能:

    设置进度条的背景色和前景色

    设置进度条的外观方式(3D,single,none)

    是否自动显示当前进度比例(比如在进度条的中间显示当前进度58%)

    当然,这个功能还可以增加很多,比如背景色和前景色也可以用图片代替,还有其它的功能打算在以后有时间时再添加,这次就写这些了。

    代码如下:

    using System;

    using System.Collections;

    using System.ComponentModel;

    using System.Drawing;

    using System.Drawing.Drawing2D ;

    using System.Data;

    using System.Windows.Forms;

    namespace XiaoPang.Windows

    {

         /// <summary>

         /// GProgressBar 的摘要说明。

         /// </summary>

         public class GProgressBar : System.Windows.Forms.UserControl

         {

             /// <summary>

             /// 必需的设计器变量。

             /// </summary>

             private System.ComponentModel.Container components = null;

             public GProgressBar()

             {

                  // 该调用是 Windows.Forms 窗体设计器所必需的。

                  InitializeComponent();

                  base.Height = 23 ;

                  this.Resize+=new EventHandler(GProgressBar_Resize);

                  this.LocationChanged+=new EventHandler(GProgressBar_Resize);

             }

             private void GProgressBar_Resize(object sender,System.EventArgs e)

             {

                  base.Refresh() ;

             }

             private  int mMax =100;

             [Browsable(true), Description("最大值"), Category("XiaoPang")]

             public int Max

             {

                  get

                  {

                       return mMax ;

                  }

                  set

                  {

                       mMax = value > 0?value:1;

                  }

             }

            

             [Browsable(true), Description("大小"), Category("XiaoPang")]

              public new Size Size

             {

                  get

                  {

                       return base.Size ;

                  }

                  set

                  {

                       base.Size = value ;

                  }

             }

             private  int mMin =0;

             [Browsable(true), Description("最小值"), Category("XiaoPang")]

             public int Min

             {

                  get

                  {

                       return mMin ;

                  }

                  set

                  {

                       mMin = value ;

                  }

             }

             private int mStep = 1 ;

             [Browsable(true), Description("步长"), Category("XiaoPang")]

             public int Step

             {

                  get

                  {

                       return mStep ;

                  }

                  set

                  {

                       mStep = value ;

                  }

            

             }

                 

             [Browsable(true), Description("背景色"), Category("XiaoPang")]

             public override Color BackColor

             {

                  get

                  {

                       return base.BackColor ;

                  }

                  set

                  {

                       base.BackColor = value ;

                  }

             }

             [Browsable(true), Description("前景色"), Category("XiaoPang")]

             public override Color ForeColor

             {

                  get

                  {

                       return base.ForeColor ;

                  }

                  set

                  {

                       base.ForeColor = value ;

                  }

             }

             private bool mRate = false;

             [Browsable(true), Description("是否显示比例数字"), Category("XiaoPang")]

             public bool Rate

             {

                  get

                  {

                       return mRate ;

                  }

                  set

                  {

                       mRate = value ;

                  }

             }

             private int mValue = 0 ;

             [Browsable(true), Description("当前值"), Category("XiaoPang")]

             public int Value

             {

                  get

                  {

                       return mValue ;

                  }

                  set

                  {

                       if (value <= this.Max)

                        mValue = value ;

                       else

                           mValue = this.Max ;

                       this.Refresh() ;

                  }

             }

             private BorderStyle mBorderStyle = BorderStyle.Fixed3D ;

             [DefaultValue(0), Category("XiaoPang"),Description("外观")]

             public BorderStyle BorderStyle

             {

                  get

                  {

                       return this.mBorderStyle;

                  }

                  set

                  {

                       if (this.mBorderStyle != value)

                       {

                           this.mBorderStyle = value;

                           this.Refresh() ;

                       }

                  }

             }

             public void PerformStep()

             {

                  Value++ ;

             }

             private void DrawProgress(Graphics g,Rectangle rect)

             {

                  int iWidth = (Value*rect.Width)/Max ;

                  Rectangle DrawRect = new Rectangle(rect.X,rect.Y,iWidth,rect.Height) ;

                  SolidBrush front = new SolidBrush(this.ForeColor) ;

                  g.FillRectangle(front,DrawRect);    

                  if (Rate)

                  {

                       int iRate = Value*100/Max ;

                       string strText = iRate.ToString() + "%" ;

                       int iTextWidth = (int)g.MeasureString(strText,this.Font).Width ;

                       int iStart = rect.Left + (rect.Width - iTextWidth)/2 ;          

                       Point posS = new Point(iStart -10,rect.Top) ;

                       Point posE = new Point(iStart + iTextWidth + 10,rect.Bottom) ;

                       LinearGradientBrush textbrush = new LinearGradientBrush(posS,posE,this.BackColor,this.ForeColor) ;

                       g.DrawString(strText,this.Font,textbrush,iStart ,rect.Top+5) ;

                  }            

             }

             protected override void OnPaintBackground(PaintEventArgs pevent)

             {

                  SolidBrush back = new SolidBrush(this.BackColor) ;

                  pevent.Graphics.FillRectangle(back,pevent.ClipRectangle);   

             }

             protected override void OnPaint(PaintEventArgs e)

             {

                  if (!this.DesignMode)

                    DrawProgress(e.Graphics,e.ClipRectangle) ;

                 

                  switch(BorderStyle)

                  {

                       case BorderStyle.None:

                           break ;

                       case BorderStyle.FixedSingle:

                           System.Windows.Forms.ControlPaint.DrawBorder3D(e.Graphics,e.ClipRectangle,Border3DStyle.Flat) ;

                           break ;

                       case BorderStyle.Fixed3D:

                           System.Windows.Forms.ControlPaint.DrawBorder3D(e.Graphics,e.ClipRectangle,Border3DStyle.Sunken) ;

                           break ;

                  }

             }

             /// <summary>

             /// 清理所有正在使用的资源。

             /// </summary>

             protected override void Dispose( bool disposing )

             {

                  if( disposing )

                  {

                       if(components != null)

                       {

                           components.Dispose();

                       }

                  }

                  base.Dispose( disposing );

             }

             #region 组件设计器生成的代码

             /// <summary>

             /// 设计器支持所需的方法 - 不要使用代码编辑器

             /// 修改此方法的内容。

             /// </summary>

             private void InitializeComponent()

             {

                  //

                  // GProgressBar

                  //

                  this.Name = "GProgressBar";

                  this.Size = new System.Drawing.Size(150, 24);

             }

             #endregion

         }

    }

  • 相关阅读:
    第二章 关系模型介绍
    第一章 引言
    只要人人都献出一点爱......
    小算法
    题目:返回一个整数数组中最大子数组的和。
    题目:返回一个整数数组中最大子数组的和
    梦断代码读后感之开始篇
    电梯调度需求分析
    结对开发--求二维数组的最大子数组
    四则运算(3)--答题小系统
  • 原文地址:https://www.cnblogs.com/zhuor/p/282792.html
Copyright © 2011-2022 走看看