白天有雨

此处应该有掌声

导航

功能增强的进度条控件(源码)

最近青岛微软开发者俱乐部 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

     }

}

posted on 2005-11-23 14:32  卓如  阅读(335)  评论(0编辑  收藏  举报