2

OK、プログレスバーに何を描くかのコードは次のとおりです。

private void timer2_Tick(object sender, EventArgs e)
    {
        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));
        progressBar1.Increment(+1);
        if (progressBar1.Value >= 99)
        {
            timer2.Stop();
            this.Close();
        }

わかりましたので、プログレスバーの値を表示するラベルを真ん中にペイントしています。何故か点滅し続けて……消えたり現れたり。それで、誰かが私にそのコードを取り出してペイントメソッドに入れるように言った....私はそれを見ません。もっと簡単な方法はありますか?

4

2 に答える 2

7

動作するはずのコードを次に示します (オプション番号 3 を使用し、子クラスを作成し、ペイント メッセージを処理するために WndProc をオーバーライドしました。

public class Prog : ProgressBar
{
    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);

        if (m.Msg == 0x000F)
        {
            var flags = TextFormatFlags.VerticalCenter |
                        TextFormatFlags.HorizontalCenter |
                        TextFormatFlags.SingleLine |
                        TextFormatFlags.WordEllipsis;

            TextRenderer.DrawText(CreateGraphics(),
                                  ((float)this.Value/this.Maximum*100) + "%",
                                  Font,
                                  new Rectangle(0, 0, this.Width, this.Height),
                                  Color.Black,
                                  flags);
        }
    }
}
于 2012-05-17T20:46:51.687 に答える
1

ProgressBarRendererを使用して、描画全体を自分で行うこともできます。

于 2012-05-17T20:55:11.323 に答える