如何在C# NET 中建立一个平滑的进度条.docx
- 文档编号:25118305
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:9
- 大小:17KB
如何在C# NET 中建立一个平滑的进度条.docx
《如何在C# NET 中建立一个平滑的进度条.docx》由会员分享,可在线阅读,更多相关《如何在C# NET 中建立一个平滑的进度条.docx(9页珍藏版)》请在冰豆网上搜索。
如何在C#NET中建立一个平滑的进度条
如何在C#.NET中建立一个平滑的进度条
概述
本文描述了如何建立一个简单的、自定义的用户控件——一个平滑的进度条。
在早先的进度条控件版本中,例如在MicrosoftWindowsCommonControlsActiveX控件中提供的版本,您可以看到进度条有两种不同的视图。
您可以通过设定Scrolling属性来设定Standard视图或是Smooth视图。
Smooth视图提供了一个区域来平滑的显示进度,Standard试图则看上去是由一个一个方块来表示进度的。
在VisualC#.NET中提供的进度条控件只支持Standard视图。
本文的代码样例揭示了如何建立一个有如下属性的控件:
Minimum。
该属性表示了进度条的最小值。
默认情况下是0;您不能将该属性设为负值。
Maximum。
该属性表示了进度条的最大值。
默认情况下是100。
Value。
该属性表示了进度条的当前值。
该值必须介于Minimum和Maximum之间。
ProgressBarColor。
该属性表示了进度条的颜色。
返回
--------------------------------------------------------------------------------
建立一个自定义的进度条控件
1、按着下面的步骤,在VisualC#.NET中建立一个WindowsControlLibrary项目:
a、打开MicrosoftVisualStudio.NET。
b、点击File菜单,点击New,再点击Project。
c、在NewProject对话框中,在ProjectTypes中选择VisualC#Projects,然后在Templates中选择WindowsControlLibrary。
d、在Name框中,填上SmoothProgressBar,并点击OK。
e、在ProjectExplorer中,重命名缺省的classmodule,将UserControl1.cs改为SmoothProgressBar.cs。
f、在该UserControl对象的Property窗口中,将其Name属性从UserControl1改为SmoothProgressBar。
2、此时,您已经从control类继承了一个新类,并可以添加新的功能。
但是,ProgressBar累是密封(sealed)的,不能再被继承。
因此,您必须从头开始建立这个控件。
将下面的代码添加到UserControl模块中,就在“WindowsFormDesignergeneratedcode”之后:
intmin=0;//Minimumvalueforprogressrange
intmax=100;//Maximumvalueforprogressrange
intval=0;//Currentprogress
ColorBarColor=Color.Blue;//Colorofprogressmeter
protectedoverridevoidOnResize(EventArgse)
{
//Invalidatethecontroltogetarepaint.
this.Invalidate();
}
protectedoverridevoidOnPaint(PaintEventArgse)
{
Graphicsg=e.Graphics;
SolidBrushbrush=newSolidBrush(BarColor);
floatpercent=(float)(val-min)/(float)(max-min);
Rectanglerect=this.ClientRectangle;
//Calculateareafordrawingtheprogress.
rect.Width=(int)((float)rect.Width*percent);
//Drawtheprogressmeter.
g.FillRectangle(brush,rect);
//Drawathree-dimensionalborderaroundthecontrol.
Draw3DBorder(g);
//Cleanup.
brush.Dispose();
g.Dispose();
}
publicintMinimum
{
get
{
returnmin;
}
set
{
//Preventanegativevalue.
if(value<0)
{
min=0;
}
//Makesurethattheminimumvalueisneversethigherthanthemaximumvalue.
if(value>max)
{
min=value;
min=value;
}
//Ensurevalueisstillinrange
if(val { val=min; } //Invalidatethecontroltogetarepaint. this.Invalidate(); } } publicintMaximum { get { returnmax; } set { //Makesurethatthemaximumvalueisneversetlowerthantheminimumvalue. if(value { min=value; } max=value; //Makesurethatvalueisstillinrange. if(val>max) { val=max; } //Invalidatethecontroltogetarepaint. this.Invalidate(); } } publicintValue { get { returnval; } set { intoldValue=val; //Makesurethatthevaluedoesnotstrayoutsidethevalidrange. if(value { val=min; } elseif(value>max) { val=max; } else { val=value; } //Invalidateonlythechangedarea. floatpercent; RectanglenewValueRect=this.ClientRectangle; RectangleoldValueRect=this.ClientRectangle; //Useanewvaluetocalculatetherectangleforprogress. percent=(float)(val-min)/(float)(max-min); newValueRect.Width=(int)((float)newValueRect.Width*percent); //Useanoldvaluetocalculatetherectangleforprogress. percent=(float)(oldValue-min)/(float)(max-min); oldValueRect.Width=(int)((float)oldValueRect.Width*percent); RectangleupdateRect=newRectangle(); //Findonlythepartofthescreenthatmustbeupdated. if(newValueRect.Width>oldValueRect.Width) { updateRect.X=oldValueRect.Size.Width; updateRect.Width=newValueRect.Width-oldValueRect.Width; } else { updateRect.X=newValueRect.Size.Width; updateRect.Width=oldValueRect.Width-newValueRect.Width; } updateRect.Height=this.Height; //Invalidatetheintersectionregiononly. this.Invalidate(updateRect); } } publicColorProgressBarColor { get { returnBarColor; } set { BarColor=value; //Invalidatethecontroltogetarepaint. this.Invalidate(); } } privatevoidDraw3DBorder(Graphicsg) { intPenWidth=(int)Pens.White.Width; g.DrawLine(Pens.DarkGray, newPoint(this.ClientRectangle.Left,this.ClientRectangle.Top), newPoint(this.ClientRectangle.Width-PenWidth,this.ClientRectangle.Top)); g.DrawLine(Pens.DarkGray, newPoint(this.ClientRectangle.Left,this.ClientRectangle.Top), newPoint(this.ClientRectangle.Left,this.ClientRectangle.Height-PenWidth)); g.DrawLine(Pens.White, newPoint(this.ClientRectangle.Left,this.ClientRectangle.Height-PenWidth), newPoint(this.ClientRectangle.Width-PenWidth,this.ClientRectangle.Height-PenWidth)); g.DrawLine(Pens.White, newPoint(this.ClientRectangle.Width-PenWidth,this.ClientRectangle.Top), newPoint(this.ClientRectangle.Width-PenWidth,this.ClientRectangle.Height-PenWidth)); } 3、在Build菜单中,点击BuildSolution来编译整个项目。 返回 -------------------------------------------------------------------------------- 建立一个简单的客户端应用 1、在File菜单中,点击New,再点击Project。 2、在AddNewProject对话框中,在ProjectTypes中点击VisualC#Projects,在Templates中点击WindowsApplication,并点击OK。 3、按照下面的步骤,在Form上添加两个SmoothProgressBar实例: a、在Tools菜单上,点击CustomizeToolbox。 b、点击.NETFrameworkComponents页。 c、点击Browse,然后选中你在CreateaCustomProgressBarControl段中建立的SmoothProgressBar.dll文件。 d、点击OK。 您可以看到在toolbox中已经有SmoothProgressBar控件了。 e、从toolbox中拖两个SmoothProgressBar控件的实例到该WindowsApplication项目中的默认form上。 4、从toolbox页中拖一个Timer控件到form上。 5、将下面的代码添加到Timer控件的Tick事件中: if(this.smoothProgressBar1.Value>0) { this.smoothProgressBar1.Value--; this.smoothProgressBar2.Value++; } else { this.timer1.Enabled=false; } 6、从toolbox页中拖一个Button控件到form上。 7、将下面的代码添加到Button控件的Click事件中: this.smoothProgressBar1.Value=100; this.smoothProgressBar2.Value=0; this.timer1.Interval=1; this.timer1.Enabled=true; 8、在Debug菜单中,点击Start来运行样例项目。 9、点击Button。 注意观察那两个进度指示器。 一个逐渐减小,另一个逐渐增加。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何在C# NET 中建立一个平滑的进度条 如何 C# 建立 一个 平滑 进度条