四行C#代码实现状态栏中加载进度条

来源:互联网 发布:大数据世界小说 编辑:程序博客网 时间:2024/06/08 12:19

[转载]四行C#代码实现状态栏中加载进度条!


原文地址:四行C#代码实现状态栏中加载进度条!作者:Tuliplanetrain

 

    我们在做程序的很多时候都需要用状态栏来显示程序运行的状态信息,有时我们又需要将程序的运行状态用进度条的形式显示出来,而不想占用面板空间,所以想把进度条放到状态栏中,将二者相结合。这样做即省面板空间又美观。

    笔者在用C#做程序的时候遇到了上述问题,在试验了许多种方法后都达不到满意的效果,最后终于找到一种即简单又实用的方法,这个方法只需4行核心代码即可把进度条加载到状态栏中,而且可以把进度条放到状态栏中的任何位置。

    首先我们要在你的程序中加入一状态栏statusBar1,将statusBar1的ShowPanels属性设为true,然后点击statusBar1属性页中的Panels上的扩展按钮,就会出现一个添加状态栏面板(StatusBarPanel)的对话框。在其中添加两个StatusBarPanel,一个为message(用于显示进度条的进度,可选),另一个为progressbar(将把进度条放置其上),把progressbar的BorderStyle属性设为None。

    现在我们就可以开始书写代码了,首先在程序的开头添加

 

// 这行代码是新建一个进度条,因为它不是通过设计器添加的而是我们用代码

// 添加的,所以程序不运行时它不显示在程序面板内。

private ProgressBar progress = new ProgressBar();

 

然后我们把剩下的三行代码添加到程序的构造函数中

 

// 第一行代码是这4行代码中最重要的一行,它把progress的父控件置为

// statusBar1,也就是说把progress放置到statusBar1中,而这正是我们想

//要的。

progress.Parent = statusBar1;

 

// 第二行代码也很重要,我们把进度条放到状态栏内了还不够,编译器默认进

// 度条添加到状态栏的开头,而我们必须把进度条放到我们想要的位置,

// Rectangle方法是用来存储矩形区域的位置和大小的,我们将用它为

// progress重新设置位置和大小。我们用到的是Rectangle方法构造函数的带4

// 个参数的重载public Rectangle(int x,int y,int width,int height);,// 4个参数均为整形,依次表示矩形左上角的x坐标、矩形左上角的y坐标、矩形// 的宽度、矩形的高度。我们把x设为message.Width + 1是使progress紧跟在

// messgae后面,也就是与progressbar对齐,把y设为2(状态栏上沿与状态栏

// 面板上沿之差为2个像素)是使progress上沿与其它状态栏面板上沿对齐,把// 矩形宽度设为progressbar.Width是使progress和progressbar长度相等,把

// 矩形高度设为statusBar1.Height – 2是使progress高度与其它状态栏面板// 高度相等。

 

Rectangle bounds = new Rectangle(message.Width + 1,2,progressbar.Width,statusBar1.Height - 2);

 

// 最后一行代码是把设计好了的矩形位置和大小赋给progress,这样我们就把

// progress停靠到我们想要的地方了。

progress.Bounds = bounds;

    这样我们仅用4行代码就把进度条添加到了状态栏中自己想要的位置上了,其实我们只是把statusBar1中的progressbar的位置和大小赋给了progress,使它盖住progressbar,看起来就象是直接添加到statusBar1中一样。读者还可以通过改变矩形的位置和大小来适应自己的程序,把进度条放到自己需要的位置。
向状态栏中加载进度条的方法多种多样,读者还可以改变progressbar的Style属性为OwnerDraw,然后自己画进度条,本文中的方法只是笔者想出来的一种简单易行的方法,如果读者有兴趣甚至可以再加工一下,用本文中的方法做一个带进度条的状态栏ActiveX控件。如果读者想看效果的话可以加入下面的语句进行测试
 

//测试本例效果

progress.Value = 50;

message.Text = progress.Value.ToString() + "%";

 

显示效果如下图


    其实有的时候我们只要多动动脑子,换一种方法想问题就会得到意想不到的效果,而解决问题的方法也是多种多样,要不拘泥其一,多多尝试。

原创粉丝点击