当前位置:编程学习 > C#/ASP.NET >>

如何制作WinForm中自定义进度条

前2天在网上找到一个很有意思的进度条控件,拿出来给大家分享一下,顺便记录一下自己的学习心得。

   先截个图看看效果:

ProgressBar

     由于项目需要,要在复杂的执行中给用户展示执行进度,难免的就会涉及到进度条。在codeproject上面看到一个叫Progress-O-Doom的进度条控件,看了一下觉得蛮有意思的,就下了个回来研究了一下。发现它的进度条都是由一些子控件绘画出来的,包括专门画边框的,专门画滚动条背景的,专门画滚动条的。好像是把一个进度条分解成了好几个东西去分别绘制,而且有些是可以自由组合的,最终组合而成的进度条可以有多种效果,可以自己试验一下,考验想象力的时候到了。

    除了最基本的ProgressBarEx这个控件之外,还有几种内置的滚动条控件,包括Rar样式的RarProgressBar、包含二层滚动条的DualProgressBar.跑按照作者的设计的话其实是只需要一个ProgressBarEx,再加上一些ProgressPainter,BackgroundPainter,BorderPainter,就可以组合出很酷的进度条。其中ProgressPainter也可以单独设置自己的GlossPainter和BorderPainter属性,而BackgroundPainter也是可以设置它的GlossPainter属性的,就这种灵活的组合,很方便,而且作者都是有可视化界面的,拖拖拽拽,点点鼠标设置一下,就可以弄一个很酷的进度条出来。

    用一个DualProgressBar就可以解决我项目的需求,因为我有二层的for循环,第一层的滚动条显示外层的循环,第二层的滚动条显示里层的循环,蛮好的。

   先在窗体上面放置一个DualProgressBar,这个类型的滚动条需要4个Painter去描绘,Painter ,所以可以再分别在窗体上面选择对应类型的Painter,然后分别设置好Painter的属性,主要是颜色类和样式类,有的还涉及到二种颜色,有的样式可以设置为突出或是凹进去或者和窗体平齐,3D效果之类的。其实像这个进度条设置一下MasterValue和Value就可以在设计的时候看出它其实是二个进度条的组合了。这里MasterPainter和ProgressPainter要设置成2个不一样的ProgressPainter,至少要颜色不一样才能看得到是二个在同时滚动嘛。

    后台代码的使用也是比较简单的,主要就是对MasterValue和Value赋值就可以了。设置2个参数,第一个是第一层的循环次数,第二个参数是第二层循环的次数。

/// <summary>
/// Shows the progress.
/// </summary>
/// <param name="firstLoop">The first loop count.</param>
/// <param name="secondLoop">The second loop count.</param>
private void ShowProgress(int firstLoop, int secondLoop)
{
    dualProgressBar1.Value = 0;
    dualProgressBar1.MasterValue = 0;
    dualProgressBar1.Maximum = secondLoop;
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,