功能增强的进度条控件

来源:互联网 发布:读取通达信日线数据 编辑:程序博客网 时间:2024/06/10 01:59

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

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

设置进度条的外观方式(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

 

     }

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击