如何将System.Drawing.Color结构中的颜色列表提取到集合或数组中?
获取颜色集合比使用此结构作为基础更有效吗?
所以你要这样做:
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); }
这会写出所有颜色,但您可以轻松定制它以将颜色名称添加到列表中.
查看此代码项目项目以构建颜色图表.
试试这个:
foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor))) { Trace.WriteLine(string.Format("{0}", knownColor)); }
除了jons911所说的,如果你只想要"命名"颜色而不是像"ActiveBorder"这样的系统颜色,那么这个Color
类有一个IsSystemColor属性可以用来过滤掉它们.
这里的大多数答案都会导致颜色名称(字符串)的集合,而不是System.Drawing.Color对象。如果需要实际系统颜色的集合,请使用以下方法:
using System.Collections.Generic; using System.Drawing; using System.Linq; ... static IEnumerableGetSystemColors() { Type type = typeof(Color); return type.GetProperties().Where(info => info.PropertyType == type).Select(info => (Color)info.GetValue(null, null)); }