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 に答える