C # индикатор выполнения меняет цвет - PullRequest
10 голосов
/ 07 ноября 2011

Я пытаюсь изменить цвет индикатора выполнения, я использую его как средство проверки надежности пароля. Например, если нужный пароль слабый, индикатор выполнения станет желтым, если средний, то зеленым. Сильный, оранжевый. Очень сильный, красный. Это просто что-то подобное. Вот мой код для проверки надежности пароля:

using System.Text.RegularExpressions;
using System.Drawing;
using System.Drawing.Drawing2D;

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 не работает. Любая помощь? Спасибо.

Ответы [ 3 ]

23 голосов
/ 07 ноября 2011

Цвет индикатора выполнения нельзя изменить в c #, если только визуальные стили не отключены. Хотя в среде IDE можно изменить цвет, изменения цвета не будет наблюдаться, поскольку индикатор выполнения будет воспринимать визуальный стиль текущей операционной системы. Вы можете отключить визуальный стиль для всего приложения. Для этого перейдите в начальный класс программы и удалите эту строку из кода

 Application.EnableVisualStyles();

или используйте какой-нибудь пользовательский индикатор выполнения, как этот http://www.codeproject.com/KB/cpp/colorprogressbar.aspx

4 голосов
/ 07 ноября 2011

Найдите и удалите из своей заявки Application.EnableVisualStyles();.

Вы можете найти множество примеров из здесь

3 голосов
/ 07 ноября 2011

Красный имеет тенденцию указывать на ошибки или проблемы - пожалуйста, пересмотрите использование красного для обозначения «надежного пароля».

Кроме того, поскольку вы обновляете цвет много раз на основе потенциально большого количества совпадений, ваши цвета выигралине будет настолько последовательным, как хотелось бы.

Вместо этого присвойте каждому из условий балл , а затем выберите свой цвет на основе общего балла:

    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 , которая иногда проще, чем предоставленная языком switch или case инструкция.(В частности, C / C ++ подвержен ошибкам программного обеспечения.)

...