2011-11-07 63 views
8

Tôi đang cố thay đổi màu của thanh tiến trình, tôi đang sử dụng nó làm trình xác nhận độ mạnh mật khẩu. Ví dụ: nếu mật khẩu mong muốn yếu, thanh tiến trình sẽ chuyển sang màu vàng, nếu trung bình, sau đó là màu xanh lục. Mạnh mẽ, màu da cam. Rất mạnh, màu đỏ. Nó chỉ là một cái gì đó như thế. Đây là mã của tôi cho trình xác thực độ mạnh mật khẩu:Thay đổi màu sắc của thanh tiến trình # #

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, @"[[email protected]#\$%\^&\*\?_~\-\(\);\.\+:]+")) 
     pgbPass.ForeColor = Color.Red; 

pgbPass.ForeColor = Color.ColorHere dường như không hoạt động. Bất kỳ giúp đỡ? Cảm ơn.

+2

Ar e bạn sử dụng WinForms, ASP.NET, WPF, Silverlight? –

+0

Windows Forms, WPF, v.v ...? – MoonKnight

+0

Nếu bạn đặt nó theo cách thủ công và không phải trong phương thức này, điều đó có hiệu quả không? – John

Trả lời

20

Màu thanh tiến trình không thể thay đổi trong C# trừ khi kiểu trực quan bị tắt. Mặc dù IDE đề nghị thay đổi màu bạn sẽ không thấy thay đổi màu sắc Khi thanh tiến trình sẽ lấy phong cách trực quan của hệ điều hành hiện tại.Bạn có thể chọn tắt kiểu trực quan cho toàn bộ ứng dụng của mình.Để thực hiện việc này, hãy chuyển sang lớp bắt đầu của chương trình và xóa dòng này khỏi mã

Application.EnableVisualStyles(); 

hoặc sử dụng một số điều khiển thanh tiến trình tùy chỉnh như thế này http://www.codeproject.com/KB/cpp/colorprogressbar.aspx

+0

Lưu ý 1: Điều này cũng sẽ xóa kiểu trực quan khỏi tất cả các điều khiển khác (ví dụ: Hộp văn bản, Nút). Lưu ý 2: Câu hỏi là về WinForms. – hfrmobile

2

đỏ có xu hướng để chỉ ra sai sót hoặc những rắc rối - vui lòng xem xét lại sử dụng màu đỏ để chỉ ra "mật khẩu mạnh".

Ngoài ra, vì bạn đang cập nhật màu nhiều lần dựa trên nhiều khả năng phù hợp, màu của bạn sẽ không nhất quán như bạn muốn.

Thay vào đó, cung cấp cho mỗi người trong số các điều kiện một điểm, và sau đó chọn màu sắc của bạn dựa trên tổng số điểm:

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, @"[[email protected]#\$%\^&\*\?_~\-\(\);\.\+:]+")) 
     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; 
    } 

Lưu ý việc sử dụng một cấu trúc else-if đó là đôi khi dễ dàng hơn ngôn ngữ cung cấp switch hoặc tuyên bố case. (C/C++ đặc biệt dễ bị lỗi phần mềm.)

+1

Câu trả lời này không phải là câu hỏi ban đầu về ProgressBar. – hfrmobile

Các vấn đề liên quan