功能增强的进度条控件(源码) - 中国WEB开发者网络 (http://www.webasp.net) -- 技术教程 (http://www.webasp.net/article/) --- 功能增强的进度条控件(源码) (http://www.webasp.net/article/27/26020.htm) |
| -- 作者:未知 -- 发布日期: 2005-08-22 |
| 因为比较简单,也没有多少技术含量,就把它帖出来,希望给别的朋友一点帮助
这个进度条控件,除了具有普通进度条的功能以外,还具有如下功能:
设置进度条的背景色和前景色
设置进度条的外观方式(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 } }
|
| webasp.net |