【问题标题】:Any simple way to change color of Progress Bar in C#? [duplicate]在 C# 中更改进度条颜色的任何简单方法? [复制]
【发布时间】:2017-10-21 05:15:48
【问题描述】:

我现在正在编写简单的 Winapps C# 来显示进度条,当它的值 > 70(假设值范围是 0 到 100)时,它通常显示绿色并变为红色。

我在 Stack Overflow 上看了一些方法,发现有一些复杂的方法只是用来改变进度条的颜色。

在进度条的属性中,有两个参数Forecolor和backcolor可以改变进度条的颜色,我确实尝试了以下代码:

        pgBar1.ForeColor = Color.FromArgb(255, 0, 0);
        pgBar1.BackColor = Color.FromArgb(255, 100, 0);

但它似乎不起作用。我想知道为什么不呢?

任何人都可以提出简单的方法吗?

谢谢。

【问题讨论】:

    标签: c#


    【解决方案1】:

    有一种非常简单的方法可以做到这一点,我不会说它复杂 - 只需将这个类粘贴到您的项目中的任何位置(如 this answer 所建议的那样):

    public static class ModifyProgressBarColor
    {
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
        static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr w, IntPtr l);
        public static void SetState(this ProgressBar pBar, int state)
        {
            SendMessage(pBar.Handle, 1040, (IntPtr)state, IntPtr.Zero);
        }
    }
    

    因为它是一个 extension method 你可以这样使用它:

    pgBar1.SetState(2);
    

    状态编码如下:

    1 -> 绿色

    2 -> 红色

    3 -> 黄色

    您的解决方案不起作用,因为 BackColor 属性不是条形的颜色。

    当然,您可以覆盖进度条的绘制方法,以将其着色为每种可能的颜色,但我想这不是一个简单的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 2011-01-02
      • 2014-10-08
      • 1970-01-01
      • 2014-08-19
      相关资源
      最近更新 更多