当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在System.Drawing.Color中获取所有颜色的集合?》经验,为你挑选了4个好方法。

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

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



1> jons911..:

所以你要这样做:

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);
}

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

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



2> Roger Lipsco..:

试试这个:

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



3> Ryan Lundy..:

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



4> grenade..:

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

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

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有