如何在Windows进度条控件中设置阈值?

时间:2011-03-05 09:22:13

标签: c# winforms

我在winform中使用windows progressbar。它的最小值是20,最大值是120.我必须在进度条中为值= 60设置阈值,这样如果值保持在60以下,那么如果值大于60则进度条颜色将为红色,则进度条颜色应为绿色。      最重要的是,我希望将此阈值显示为progessbar中的一条线,无论可能是进度条绿色还是红色,都应该是可见的。        有人有想法吗?我们将非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

你可以尝试这个(但你不会得到动画)。

它是this answer的修改版本,添加了阈值功能。

public class NewProgressBar : ProgressBar
{
    //This property takes the Threshold.
    public int Threshold{ get; set; }

    public NewProgressBar()
    {
        this.SetStyle(ControlStyles.UserPaint, true);
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        Rectangle rec = e.ClipRectangle;

        rec.Width = (int)(rec.Width * ((double)Value / Maximum)) - 4;
        if(ProgressBarRenderer.IsSupported)
           ProgressBarRenderer.DrawHorizontalBar(e.Graphics, e.ClipRectangle);
        rec.Height = rec.Height - 4;
            //Check value is greater that Threshold
            if(this.Value > Threshold)
            {
                e.Graphics.FillRectangle(Brushes.Green, 2, 2, rec.Width, rec.Height);
            }
            else
            {
                e.Graphics.FillRectangle(Brushes.Red, 2, 2, rec.Width, rec.Height);
            }
            //This line should do that
            e.Graphics.DrawLine(Pens.Black,Threshold-1,2,Threshold-1,rec.Height);
    }
}

现在您可以像这样使用它:

NewProgressBar p = new NewProgressBar();
//Set properties
//Set threshold
p.Threshold =  60;    

答案 1 :(得分:0)

使用默认的ProgressBar实现,您将无法完全实现所需。您需要创建自定义控件。

如果您只想更改颜色,可以通过在百分比值更改时更改ForeColor属性来实现。