2009-06-21 31 views
6

Tôi đã gặp một 'vấn đề' mà ​​tôi nghĩ phải khá phổ biến và tự hỏi liệu có ai có thể giúp đỡ hay không.Làm cách nào để tạo một bảng liệt kê các màu trong ứng dụng biểu mẫu cửa sổ?

Tôi đang tạo một biểu mẫu cửa sổ đơn giản (sử dụng VB.NET) cho một người bạn để sử dụng tại nơi làm việc. Công ty của ông có khoảng 10 chủ đề màu sắc cụ thể (họ có danh sách các giá trị RGB) mà họ sử dụng cho biểu tượng công ty, trang web, v.v.

Tôi muốn tuân theo bảng màu này trong ứng dụng của mình và để đơn giản hóa sự phát triển, xây dựng một đếm những màu sắc để tránh cứng mã hóa các giá trị RBG cho mỗi nhãn, bảng điều khiển, vv

suy nghĩ ban đầu của tôi là phải làm như sau:

Enum ColorTypes 
    CompanyDarkBlue = Color.FromArgB(0,56,147) 
    CompanyBlue = Color.FromArgB(0,111,198) 
    CompanyLightBlue = Color.FromArgB(0,145,201) 
End Enum 

Tuy nhiên, nó không phải là đơn giản như một hằng số là cần thiết. Tôi nhìn xung quanh trên internet và tôi tìm thấy một ví dụ về làm thế nào để đạt được những gì tôi cần nhưng nó dường như vô cùng phức tạp cho những gì có vẻ như một yêu cầu khá phổ biến cho phát triển ứng dụng.

Bạn nghĩ cách nào tốt nhất để giải quyết vấn đề này?

Cảm ơn nhiều

Trả lời

0

Bạn có thể lưu trữ các thông tin tương tự trong một lớp học với các lĩnh vực chia sẻ/tài sản và đạt được hiệu quả tương tự như với một điều tra.

Không thấy lý do tại sao một điều tra là cần thiết ở đây tại tất cả

3

Bạn có thể sử dụng một phương pháp mở rộng. Đầu tiên đơn giản hóa enum của bạn:

enum ColorType 
{ 
    CompanyDarkBlue, 
    CompanyBlue, 
    CompanyLightBlue 
} 

Phương pháp mở rộng sẽ giống như thế này:

public static class ColorTypeExtensions 
{ 
    public static Color ToColor(this ColorType colorType) 
    { 
     switch(colorType) 
     { 
     case ColorType.CompanyDarkBlue: return Color.FromArgB(0,56,147); 
     ... 
     } 
    } 
} 

này sẽ cho phép bạn viết:

ColorType.CompanyDarkBlue.ToColor(); 

Để biết thêm thông tin hãy nhìn vào C#: Enhance Enums using Extension Methods

2

Đặt các màu này trong lớp riêng biệt và đặt chúng làm thuộc tính thay vì hơn đếm.

public class myColor 
{ 
    public static Color CompanyDarkBlue 
    { 
     get { return Color.FromArgb(0, 56, 147); } 
    } 

    public static Color CompanyBlue 
    { 
     get { return Color.FromArgb(0, 111, 198); } 
    } 

    public static Color CompanyLightBlue 
    { 
     get { return Color.FromArgb(0, 145, 201); } 
    } 
} 
+0

Wahid - Cảm ơn. Tôi sử dụng này và evrything workd ra tốt. Cám ơn vì đã dành thời gian để giúp đỡ. –

3

Tôi không nói bạn cần liệt kê ở đây. Khi bạn đề cập đến "lược đồ màu", cách thông thường để thực hiện nó là sử dụng đa hình để cho phép các phối màu khác nhau.

Điều đó có nghĩa bạn sẽ phải giao diện của bạn như thế này:

public interface IColorScheme 
    { 
     Color CompanyDarkBlue { get; } 
     Color CompanyBlue { get; } 
     Color CompanyLightBlue { get; } 
    } 

và sau đó thực hiện nó trong bất kỳ cách nào bạn thích nó:

public class MyColorScheme : IColorScheme 
    { 
     public virtual Color CompanyDarkBlue 
     { 
      get { return Color.FromArgB(0,56,147); } 
     } 

     public virtual Color CompanyBlue 
     { 
      get { return Color.FromArgB(0,56,147); } 
     } 

     // etc. 
    } 

Lưu ý rằng tôi cũng đã thực hiện những tính chất ảo, vì vậy bạn có thể dễ dàng ghi đè lên các màu cụ thể nếu bạn cần một sơ đồ hơi khác.

Để tận dụng tối đa sự trừu tượng này, chương trình của bạn chủ yếu nên sử dụng các thuộc tính IColorScheme mà không cần biết về việc triển khai thực tế đang được sử dụng. Lược đồ màu sắc thích hợp nên được khởi tạo riêng biệt, trong quá trình khởi tạo.

+0

Groo - Cảm ơn bạn đã trả lời. Tôi đã sử dụng mã từ Wahib (xem bên dưới). Khi nó xảy ra, 'Giao diện' là chương tiếp theo trong cuốn sách tôi đang đọc và chưa quen với chúng. Một khi tôi nhận được đầu của tôi xung quanh họ tôi sẽ cố gắng đề nghị của bạn như là một bài tập học tập –

+0

Tốt, tiếp tục đi! Khi bạn đến thời điểm đó, tôi sẽ giới thiệu một bài tập: thử tạo một ứng dụng sẽ thay đổi toàn bộ lược đồ màu dựa trên cài đặt người dùng, và sau đó xem cách giao diện có thể giúp bạn làm điều đó. – Groo

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