在ProgressBar上闪烁文本

时间:2013-06-13 14:35:06

标签: c# controls progress-bar

我写了一个控件。当我在进度条上执行程序文本时闪烁。

     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());
    }
}   

你能说我做错了吗?

2 个答案:

答案 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