如何在System.Drawing.Color中获取所有颜色的集合?

时间:2008-11-10 21:10:07

标签: .net graphics

如何将System.Drawing.Color结构中的颜色列表提取到集合或数组中?

获取颜色集合是否比使用此结构作为基础更有效?

7 个答案:

答案 0 :(得分:19)

所以你要这样做:

string[] colors = Enum.GetNames(typeof(System.Drawing.KnownColor));

...获取所有collors的数组。

或者......你可以使用反射来获得颜色。 KnownColors包括“菜单”,系统菜单颜色等项目,这可能不是您想要的。因此,要获得System.Drawing.Color中的颜色名称,可以使用反射:

Type colorType = typeof(System.Drawing.Color);

PropertyInfo[] propInfoList = colorType.GetProperties(BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.Public);

foreach (System.Reflection.PropertyInfo c in propInfoList) {
  Console.WriteLine(c.Name);
}

这会写出所有颜色,但您可以轻松地定制它以将颜色名称添加到列表中。

building a color chart上查看此代码项目项目。

答案 1 :(得分:6)

试试这个:

foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
{
   Trace.WriteLine(string.Format("{0}", knownColor));
}

答案 2 :(得分:5)

除了jons911所说的,如果你只想要“命名”颜色而不是像“ActiveBorder”这样的系统颜色,Color类有一个IsSystemColor属性可以用来过滤掉那些。 / p>

答案 3 :(得分:5)

这里的大多数答案都会产生颜色名称(字符串)的集合,而不是System.Drawing.Color对象。如果您需要实际系统颜色的集合,请使用:

using System.Collections.Generic;
using System.Drawing;
using System.Linq;
...
static IEnumerable<Color> GetSystemColors() {
    Type type = typeof(Color);
    return type.GetProperties().Where(info => info.PropertyType == type).Select(info => (Color)info.GetValue(null, null));
}

答案 4 :(得分:1)

在System.Drawing中有一个Enum KnownColor,它指定已知的系统颜色。

列表与LT;计算值: 列出allColors =新列表(Enum.GetNames(typeof(KnownColor)));

数组[] string [] allColors = Enum.GetNames(typeof(KnownColor));

答案 5 :(得分:1)

Here是一个在线页面,显示每种颜色及其名称的方便样本。

答案 6 :(得分:1)

您必须使用反射来从System.Drawing.Color结构中获取颜色。

System.Collections.Generic.List<string> colors = 
        new System.Collections.Generic.List<string>();
Type t = typeof(System.Drawing.Color);
System.Reflection.PropertyInfo[] infos = t.GetProperties();
foreach (System.Reflection.PropertyInfo info in infos)
    if (info.PropertyType == typeof(System.Drawing.Color))
        colors.Add(info.Name);