如何在窗体表单应用程序中为颜色创建枚举?

时间:2009-06-21 10:08:18

标签: vb.net enumeration

我遇到了一个“问题”,我认为这个问题必须非常普遍,并且想知道是否有人可以提供帮助。

我正在构建一个简单的Windows窗体(使用VB.NET)供朋友在工作中使用。他的公司有大约10种特定颜色方案(它们有RGB值列表),用于公司徽标,网站等。

我想在我的应用程序中遵循这个颜色方案,为了简化开发,我想建立这些颜色的枚举,以避免为每个标签,面板等对RBG值进行硬编码。

我最初的想法是做以下事情:

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

然而,并不是那么简单,因为需要一个常数。我在互联网上环顾四周,找到了一个如何实现我需要的例子,但对于应用程序开发似乎是一个非常常见的要求,它似乎过于复杂。

您认为解决此问题的最佳方法是什么?

非常感谢

5 个答案:

答案 0 :(得分:3)

您可以使用扩展方法。首先简化你的枚举:

enum ColorType
{
   CompanyDarkBlue,
   CompanyBlue,
   CompanyLightBlue
}

扩展方法如下所示:

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

这将允许你写:

ColorType.CompanyDarkBlue.ToColor();

有关详细信息,请查看C#: Enhance Enums using Extension Methods

答案 1 :(得分:3)

我不会说你需要一个枚举。当你提到“配色方案”时,通常的做法是使用多态来允许不同的配色方案。

这意味着你的界面会是这样的:

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

然后以您喜欢的任何方式实现它:

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

请注意,我还将这些属性设置为虚拟,因此如果您需要稍微不同的方案,则可以轻松覆盖特定颜色。

为了充分利用这种抽象,您的程序应该主要使用IColorScheme属性,而不了解正在使用的实际实现。在初始化期间,应该单独实例化适当的配色方案。

答案 2 :(得分:2)

将这些颜色放在单独的类中,并将它们作为属性而不是枚举。

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

答案 3 :(得分:0)

您可以在具有共享字段/属性的类中存储相同的信息,并达到与枚举相同的效果。

不要明白为什么在这里需要枚举

答案 4 :(得分:0)

{load}  add    %cl,%bl        # 02 d9
{store} add    %cl,%bl        # 00 cb