返回首页

{S0}
简介
这是一个非常简单的自定义控件实现一个进度条,让要通过书面文字。背景
多年来,微软已经做了一些进度条控件,但他们都已经在一些有用的功能或其他缺乏。这些功能之一是通过控制中心的文字书写能力。约旦在2008年12月,雅各布提出的一些做到这一点:

int percent = (int)(((double)(progressBar1.Value - progressBar1.Minimum) /

(double)(progressBar1.Maximum - progressBar1.Minimum)) * 100);

using (Graphics gr = progressBar1.CreateGraphics())

{

    gr.DrawString(percent.ToString() + "%",

        SystemFonts.DefaultFont,

        Brushes.Black,

        new PointF(progressBar1.Width / 2 - (gr.MeasureString(percent.ToString() + "%",

            SystemFonts.DefaultFont).Width / 2.0F),

        progressBar1.Height / 2 - (gr.MeasureString(percent.ToString() + "%",

            SystemFonts.DefaultFont).Height / 2.0F)));

}

这是一个伟大的解决方案,但它必须手工完成到每一个进度条。我想这可能是更容易,只需拖放一个自定义控件从窗体设计器预制,所以我建了一个包裹一个进度条,处理文本和/或自动绘图的百分比绘图。使用代码
使用此控件,只需拖放到你的VS工具箱CustomControls.dll,然后拖放到表单就像你一个正常的进度条的控制。
我还没有公开的所有进度栏的属性。我没有那些是:INT最低int最大int值INT步骤ProgressBarStyle风格彩色BarColor(映射到ProgressBar.ForeColor)
如果你需要访问别的,只是改变ProgressBar控件的成员,并重新编译的访问修饰符。
两个新的属性已被添加到处理的文字:BOOL ShowPercentage字符串CenterText
如果ShowPercentage是真的,那么完成百分比自动计算并显示出来,否则CenterText价值显示。一些轻微的修改原来的代码是需要做到这一点:{C}
这是一个非常简单的实现,有很多改进的余地,但对于大多数使用它是一个解决方案。历史一月十四日,2009年:战后初期

回答

评论会员:DLundin 时间:2011/12/28
有谁知道是否存在一个类似的版本在C对于那些不使用VS,
评论会员:?弗雷德NONAME 时间:2011/12/28
大控制!但它的文本,不断为我闪烁。我在这样的进度得到像每秒2-3次更新的循环使用。我可以做任何事情来解决这个{S2}
评论会员:?GPUToaster 时间:2011/12/28
尼斯
评论会员:!阿拉Jebran 时间:2011/12/28
。{S3}
评论会员:Mebur 时间:2011/12/28
感谢您的好文章。您可以解决压倒一切的OnPaint函数重绘问题。

protected override void OnPaint(PaintEventArgs p)

{   

  UpdateText(); 

  base.OnPaint(p);

}
,不要忘记画下面的代码百分比文本之前,刷新进度,
progressbar.Refresh();


修改,2009年4月1日,日(星期三)2:13
评论会员:fuyaqi 时间:2011/12/28
OnPaint方法无法执行,期待您使用"的SetStyle(ControlStyles.UserPaint真)"。但是在这种情况下,base.OnPaint(P)nothing.you将失去Windows的processbar风格
评论会员:。P3的技术 时间:2011/12/28
对不起,请你重申你的问题吗?有没有问题,绘画,这是一个净的ProgressBar,而不是一个Windows processbar ...
评论会员:。gajatko 时间:2011/12/28
还有另外一个ProgressBar的文章(代码项目),没有这些轻弹或重绘问题。
实施System.Windows.Forms.ProgressBar直接继承。

你可以在这里找到:http://www.codeproject.com/KB/progress/progressbar-percentage.aspx

控制在VB语言,但你可以找到一个简化版本在C#在这里:
希望它有助于
评论会员:。EpicCodesWife 时间:2011/12/28
尼斯的工作和良好的的解释。谢谢!

但在这种情况下,我想你可以直接从ProgressBar的继承。重写OnPaint方法,调用base.OnPaint(),然后绘制文本。然后,你就不必手动公开ProgressBar的属性。

问候语 - Gajatko

DotGNU,部分项目建立一个完整的自由软件替代NET的 - 一个真正属于自己的开发系统,
评论会员:。wogal 时间:2011/12/28
我认为这是伟大的的!甜点