web-dev-qa-db-ja.com

C#プログレスバーの色を変更

進行状況バーの色を変更しようとしています。これをパスワード強度検証ツールとして使用しています。たとえば、目的のパスワードが弱い場合、進行状況バーは黄色になり、中程度の場合は緑色になります。強い、オレンジ。非常に強い、赤。それはまさにそのようなものです。これがパスワード強度バリデーターの私のコードです。

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が機能していないようです。何か助け?ありがとう。

11
user997413

ビジュアルスタイルが無効になっていない限り、c#でプログレスバーの色を変更することはできません。IDEが色を変更することを提案しているにもかかわらず、プログレスバーが現在のオペレーティングシステムの視覚スタイルを使用するため、色の変化は観察されません。アプリケーション全体の表示スタイルを無効にすることを選択できます。これを行うには、プログラムの開始クラスに移動し、コードからこの行を削除します

 Application.EnableVisualStyles();

または、次のようなカスタムプログレスバーコントロールを使用します http://www.codeproject.com/KB/cpp/colorprogressbar.aspx

24
techno

アプリケーションから Application.EnableVisualStyles(); を見つけて削除します。

here から多くの例を見つけることができます

5
Damith

赤はエラーやトラブルを示す傾向があります。赤を使用して「強力なパスワード」を示すことを再検討してください。

また、潜在的に多くの一致に基づいて何度も色を更新しているため、色の一貫性は望みどおりにはなりません。

代わりに、各条件にscoreを指定し、合計スコアに基づいて色を選択します。

    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;
    }

言語によって提供される switch またはcaseステートメントよりも簡単な else-if 構文の使用に注意してください。 (特にC/C++はバグのあるソフトウェアになりがちです。)

3
sarnold