如何将System.Drawing.Color结构中的颜色列表提取到集合或数组中?
获取颜色集合是否比使用此结构作为基础更有效?
答案 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);