zoukankan      html  css  js  c++  java
  • 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;
        dualProgressBar1.MasterMaximum = firstLoop * secondLoop;
        for (int i = 0; i < firstLoop; i++)
        {
            dualProgressBar1.Value = 0;
            for (int j = 0; j < secondLoop; j++)
            {
                dualProgressBar1.Value = j;
                dualProgressBar1.MasterValue++;
                Application.DoEvents();
            }
        }
        dualProgressBar1.Value = 0;
        dualProgressBar1.MasterValue = 0;
    }

      效果还是不错的,有兴趣的话可以自己试一下的。 

      我提供一个原作者提供的Demo,可以先看看效果,觉得不错再去原地址去下载代码。

     /Files/bluesky4485/ProgressODoom_src.zip

      有英文版的介绍,我讲的都是自己的想法,不够详细,可能没作者介绍的那么完整,英文好的看看原版吧。
        http://www.codeproject.com/KB/progress/ProgressODoom.aspx

    作者:bluesky4485
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    java插入语句中有单引号的处理
    mybatis批量插入
    用Resttemple从数据接口中取出数据
    java1.8Stream流式算法
    rabbitmq启动命令
    【MySQL】Mysql模糊查询like提速优化
    Mybatis基础知识点:trim标签的使用
    java8 array、list操作 汇【20】)- (FlatMap)用法汇总
    编写一个定制的收集器
    mysql
  • 原文地址:https://www.cnblogs.com/bluesky4485/p/1577065.html
Copyright © 2011-2022 走看看