功能增强的进度条控件(源码)
2005-11-23 14:32
232 查看
最近青岛微软开发者俱乐部 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
}
}
这个进度条控件,除了具有普通进度条的功能以外,还具有如下功能:
设置进度条的背景色和前景色
设置进度条的外观方式(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
}
}
相关文章推荐
- 功能增强的进度条控件
- (续上)ASP.NET2.0: Ilungasoft.Framework.Web之基于Callback的无刷新上传进度条控件[带源码]
- duilib中控件拖拽功能的实现方法(附源码)
- DevExpress v15.1:VCL控件功能增强(三)
- 文件的上传下载功能的实现(包括进度条)[telerik控件]
- ASP.NET2.0: Ilungasoft.Framework.Web之基于Callback的无刷新上传进度条控件[带源码]
- 【PB】利用 IE 增强编辑控件的功能
- DevExpress v15.1:VCL控件功能增强(二)
- 公布TstringGrid增强控件TcbStrGrid源码,带CheckBox的TStringGrid控件
- php+ajax实现带进度条的上传图片功能【附demo源码下载】
- 【转】[原创]ExtAspNet新春贺岁版 - 文件上传控件、复选框列表控件、完善布局管理、表格的行扩展列、完整的100多个中文示例、30多处BUG修正与功能增强、《ExtAspNet秘密花园》系列文章
- Css背景图合并工具功能增强(附V0.11源码和可执行文件)
- ASP.NET AJAX 1.0框架之增强服务器控件的客户端功能
- 增强 GridView 控件的功能
- 仿酷狗音乐播放器开发日志二十——换肤功能背景图片控件的制作(附源码)
- Redrain 通用菜单控件使用方法和说明(增加动态添加功能、附源码和demo)
- 仿酷狗音乐播放器开发日志十八——换肤功能的实现二:改变控件和窗体透明度(附挂件类源码)
- Android编程实现显示在标题上的进度条功能【附源码下载】
- ExtAspNet新春贺岁版 - 文件上传控件、复选框列表控件、完善布局管理、表格的行扩展列、完整的100多个中文示例、30多处BUG修正与功能增强、《ExtAspNet秘密花园》系列文章
- DevExpress v15.1:Reporting控件功能增强(一)