0

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

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

你能说我做错了什么吗?

4

2 回答 2

1

我不认为,即使它有效,您也会看到闪烁效果。

这简直太快了。

您可能必须使用计时器来降低速度,或者也可能使用 System.Thread.Sleep()

于 2013-06-13T14:40:42.063 回答
0

我知道很久以前就有人问过这个问题,但也许这个答案对有类似问题的人会有所帮助。您可以在构造函数中为此自定义控件设置样式,如下所示:

SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);

最重要的是 ControlStyles.OptimizedDoubleBuffer 标志,它可以防止在太短的时间间隔内调用 Paint 时控件闪烁。

来源:http: //msdn.microsoft.com/pl-pl/library/system.windows.forms.controlstyles.aspx

于 2013-08-01T08:40:07.017 回答