【问题标题】:ProgressBar Paint Method?进度条绘制方法?
【发布时间】:2012-05-17 20:38:54
【问题描述】:

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

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方法中……我没看到。有没有更简单的方法?

【问题讨论】:

  • 检查将DoubleBuffered设置为true是否有任何不同。
  • DoubleBuffered 在哪里?它在进度条中......还是什么?我是新来的,所以...对不起
  • @EliteGamer 是表单本身的属性。
  • 另外,为什么我的表格这么早关闭...它达到了大约 97 然后停止
  • 我认为在paint方法中绘制一些东西比从其他地方绘制更合乎逻辑。性能方面我不知道是否有任何不同。 DoubleBuffered 可以提供很大帮助。

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


【解决方案1】:

这是一个应该可以工作的代码(我选择了第 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);
        }
    }
}

【讨论】:

  • Elite Gamer:为控件的 Paint 事件创建事件处理程序。在事件处理程序主体中,使用 PaintEventArgs 参数中的 Graphics 对象进行绘图。请注意,Paint 事件可能会引发多次,甚至在您的计时器的两个滴答之间。
  • 我没有看到进度条的绘画内容?
  • 经过验证,对于进度条的特定情况,选项 2 似乎是不可能的。 Paint 事件被隐藏。我会选择选项 1。
  • @lcfseth 编辑使代码更具可读性和优雅(没有烦人的滚动条)并将拼写错误“痛苦消息”修复为“绘制消息”
【解决方案2】:

你也可以用ProgressBarRenderer自己画全图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    相关资源
    最近更新 更多