ProgressBar Paint方法?

时间:2012-05-17 20:38:54

标签: c# progress-bar visual-c#-express-2010

好的,这是我在进度条上绘制内容的代码:

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

好的,所以我在它的中间画一个标签,它会显示进度条的值。出于某种原因,它一直在闪烁......消失并再次出现。所以,有人告诉我拿出那些代码并把它放在paint方法中.....我不明白。有更简单的方法吗?

2 个答案:

答案 0 :(得分: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);
        }
    }
}

答案 1 :(得分:1)

您也可以使用ProgressBarRenderer自己完成整个绘图。