0

真ん中にテキストがあるクールなプログレスバーを作りました。これが私のコードです:

private void timer2_Tick(object sender, EventArgs e)
{
    progressBar1.Increment(+1);
    int percent = progressBar1.Value;
    progressBar1
        .CreateGraphics()
        .DrawString(
            percent.ToString() + "%", 
            new Font("Arial", (float)8.25, FontStyle.Regular), 
            Brushes.Black, 
            new PointF(progressBar1.Width / 2 - 10, 
            progressBar1.Height / 2 - 7)
        );
    if (progressBar1.Value >= 99)
    {
        timer2.Stop();
        this.Close();
    }
}

何らかの理由で、テキストが表示されてから消えたり、その他の奇妙なことがあります。それはなぜですか、どうすれば修正できますか?

4

3 に答える 3

0

描画コードをPaintイベントに移動してみてください。基本的に、コントロールのビジュアルを変更しているため、デフォルトのペイント動作の代わりにこれを処理する必要があります。

于 2012-05-17T19:24:34.830 に答える
0

コントロールが再描画されるたびに、描画は消去されます。

代わりに、今すぐテキストを描画するかどうかを示すフラグを設定してからPaintイベントを処理し、フラグがtrueの場合はテキストを描画する必要があります。

タイマーティックハンドラーで、フラグを切り替えてを呼び出しますInvalidate()

于 2012-05-17T19:25:46.340 に答える
0

もう 1 つのアプローチは、UserControll を作成し、プログレス バーの上にラベルを使用し、それぞれを個別に使用することです。これは簡単に実行できる可能性があり、追加のコードはほとんど必要ありません。

于 2012-05-17T19:34:53.670 に答える