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

Ode*_*ded 9 .net graphics

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

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

jon*_*911 19

所以你要这样做:

string[] colors = Enum.GetNames(typeof(System.Drawing.KnownColor));
Run Code Online (Sandbox Code Playgroud)

...获得所有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);
}
Run Code Online (Sandbox Code Playgroud)

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

查看此代码项目项目以构建颜色图表.


Rog*_*mbe 6

试试这个:

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


Rya*_*ndy 5

除了jons911所说的,如果你只想要"命名"颜色而不是像"ActiveBorder"这样的系统颜色,那么这个Color类有一个IsSystemColor属性可以用来过滤掉它们.


gre*_*ade 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));
}
Run Code Online (Sandbox Code Playgroud)