public class ProgressBarPercentage : ProgressBar
{
private int percent;//user defined step
public void SetProgressBarText(string text)
{
using (Graphics gr = this.CreateGraphics())
{
this.Refresh();
gr.DrawString(percent.ToString() + " %", SystemFonts.DefaultFont, Brushes.Black,
new PointF(this.Width / 2 - (gr.MeasureString(percent.ToString() + " %", SystemFonts.DefaultFont).Width / 2.0F),
this.Height / 2 - (gr.MeasureString(percent.ToString() + " %", SystemFonts.DefaultFont).Height / 2.0F)));
}
}
public void SetPercent(int percent)
{
this.percent = percent;
if (this.Value < 100)
this.Value = percent;
else
this.Value = 99;
}
}
static void Main
{
ProgressBarWindow.ProgressBarPercentage progress = new ProgressBarWindow.ProgressBarPercentage();
for (int i = 0; i < 100; i++)
{
progress.SetPercent(i);
progress.SetProgressBarText(i.ToString());
}
}
你能说我做错了吗?
答案 0 :(得分:1)
我不认为,即使它起作用,你也会看到眨眼效果。
这太快了。
你必须使用计时器来降低速度,或者也可以使用System.Thread.Sleep()
答案 1 :(得分:0)
我知道很久以前就问过这个问题,但也许这个答案会对有类似问题的人有所帮助。您可以在此自定义控件的构造函数中设置样式,如下所示:
SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
最重要的是ControlStyles.OptimizedDoubleBuffer标志,当在太短的时间间隔内调用Paint时,它可以防止控件闪烁。
来源:http://msdn.microsoft.com/pl-pl/library/system.windows.forms.controlstyles.aspx