C# 进度条改变颜色

12

我想要改变我的进度条颜色,我正在使用它来作为密码强度验证器。例如,如果所需密码是弱的,进度条将变成黄色;如果是中等强度,则为绿色;强的话是橙色;非常强则为红色。就是这样一个东西。以下是我的密码强度验证器代码:

var PassChar = txtPass.Text;

if (txtPass.Text.Length < 4)
    pgbPass.ForeColor = Color.White;
if (txtPass.Text.Length >= 6)
    pgbPass.ForeColor = Color.Yellow;
if (txtPass.Text.Length >= 12)
    pgbPass.ForeColor = Color.YellowGreen;
if (Regex.IsMatch(PassChar, @"\d+"))
    pgbPass.ForeColor = Color.Green;
if (Regex.IsMatch(PassChar, @"[a-z]") && Regex.IsMatch(PassChar, @"[A-Z]"))
    pgbPass.ForeColor = Color.Orange;
if (Regex.IsMatch(PassChar, @"[!@#\$%\^&\*\?_~\-\(\);\.\+:]+"))
    pgbPass.ForeColor = Color.Red;

pgbPass.ForeColor = Color.ColorHere似乎无效,有什么帮助吗?谢谢。


2
你使用的是WinForms、ASP.NET、WPF还是Silverlight? - Emond
如果您手动设置,而不是在此方法中设置,那么是否有效? - John
我不能代表ASP.NET等技术,但对于WinForms和WPF(使用标准progressBar),我认为这涉及到子类化控件,这是相当复杂的。 - MoonKnight
4个回答

26

在c#中,除非禁用Visual Styles,否则无法更改进度条的颜色。尽管IDE提供了更改颜色的选项,但您会发现没有颜色变化,因为进度条将采用当前操作系统的视觉样式。您可以选择为整个应用程序禁用视觉样式。要做到这一点,请转到程序的起始类,并从代码中删除此行。

 Application.EnableVisualStyles();

或者使用类似于这个的自定义进度条控件: http://www.codeproject.com/KB/cpp/colorprogressbar.aspx


1
注意1:这也会从所有其他控件(例如TextBox、Button)中删除视觉样式。注意2:问题涉及WinForms。 - hfrmobile
如果这是WinForms,那么它确实是可能的。请参见此答案:https://dev59.com/55Lea4cB1Zd3GeqPxAhd#34268607。 - Nyerguds

5

2

红色往往表示错误或问题--请重新考虑使用红色来表示"强密码"。

此外,因为您根据可能的多个匹配更新颜色许多次,所以您的颜色不会像您想象的那样一致。

相反,为每个条件分配一个分数,然后根据总分选择颜色:

    int score = 0;

    if (txtPass.Text.Length < 4)
        score += 1;
    if (txtPass.Text.Length >= 6)
        score += 4;
    if (txtPass.Text.Length >= 12)
        score += 5;
    if (Regex.IsMatch(PassChar, @"[a-z]") && Regex.IsMatch(PassChar, @"[A-Z]"))
        score += 2;
    if (Regex.IsMatch(PassChar, @"[!@#\$%\^&\*\?_~\-\(\);\.\+:]+"))
        score += 3;

    if (score < 2) {
       color = Color.Red;
    } else if (score < 6) {
       color = Color.Yellow;
    } else if (score < 12) {
       color = Color.YellowGreen;
    } else {
       color = Color.Green;
    }

请注意使用else-if结构,它有时比语言提供的switchcase语句更容易,特别是C/C++的语句容易出现错误。

1
这个回答并不是关于 ProgressBar 的原始问题。 - hfrmobile

0
我知道这篇帖子很旧,但是我的谷歌搜索引擎把我带到这里寻找答案,所以其他人也可能会来到这里。
你可以告诉Windows不要对你的应用程序应用视觉样式,从而允许你在代码开始处输入以下行来更改进度条的颜色。
[System.Windows.Forms.Application]::VisualStyleState = 0

要查看可以从[System.Windows.Forms.Application]使用的属性和方法的完整列表,请参阅文档 https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.application?view=windowsdesktop-7.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接