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)
这会写出所有颜色,但您可以轻松定制它以将颜色名称添加到列表中.
查看此代码项目项目以构建颜色图表.
试试这个:
foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
{
Trace.WriteLine(string.Format("{0}", knownColor));
}
Run Code Online (Sandbox Code Playgroud)
除了jons911所说的,如果你只想要"命名"颜色而不是像"ActiveBorder"这样的系统颜色,那么这个Color类有一个IsSystemColor属性可以用来过滤掉它们.
这里的大多数答案都会导致颜色名称(字符串)的集合,而不是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)