6

我遇到了一个我认为一定很常见的“问题”,想知道是否有人可以提供帮助。

我正在构建一个简单的 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

然而,它并不是那么简单,因为需要一个常量。我在互联网上环顾四周,发现了一个如何实现我需要的示例,但对于应用程序开发似乎相当普遍的要求来说,这似乎非常复杂。

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

非常感谢

4

5 回答 5

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#:使用扩展方法增强枚举

于 2009-06-21T10:23:18.640 回答
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 属性,而无需了解正在使用的实际实现。正确的配色方案应在初始化期间单独实例化。

于 2009-06-21T10:33:40.257 回答
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); }
    }
}
于 2009-06-21T10:28:10.720 回答
0

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

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

于 2009-06-21T10:12:29.253 回答
0
public enum ColorTypes {
    CompanyDarkBlue = 0x003893,
    CompanyBlue = 0x006FC6,
    CompanyLightBlue = 0x0091C9
}
于 2020-10-08T04:15:05.960 回答