Как я могу получить коллекцию всех цветов в System.Drawing.Color? - PullRequest
9 голосов
/ 11 ноября 2008

Как извлечь список цветов в структуре System.Drawing.Color в коллекцию или массив?

Есть ли более эффективный способ получения коллекции цветов, чем использование этой структуры в качестве основы?

Ответы [ 7 ]

19 голосов
/ 11 ноября 2008

Итак, вы бы сделали:

string[] colors = Enum.GetNames(typeof(System.Drawing.KnownColor));

... чтобы получить массив всех коллоров.

Или ... Вы можете использовать отражение, чтобы просто получить цвета. 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);
}

Это записывает все цвета, но вы можете легко адаптировать их для добавления имен цветов в список.

Ознакомьтесь с этим проектом Project Code на построении таблицы цветов .

6 голосов
/ 11 ноября 2008

Попробуйте это:

foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
{
   Trace.WriteLine(string.Format("{0}", knownColor));
}
5 голосов
/ 20 января 2010

Большинство ответов здесь приводят к набору имен цветов (строк) вместо объектов 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));
}
5 голосов
/ 11 ноября 2008

В дополнение к тому, что сказал jons911, если вам нужны только «именованные» цвета, а не системные цвета, такие как «ActiveBorder», класс Color имеет свойство IsSystemColor, которое вы можете использовать для их фильтрации.

1 голос
/ 11 ноября 2008

Вы должны будете использовать отражение, чтобы получить цвета из структуры 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);
1 голос
/ 11 ноября 2008

Здесь - это онлайн-страница, на которой показан удобный образец каждого цвета вместе с его названием.

1 голос
/ 11 ноября 2008

В System.Drawing есть Enum KnownColor, он определяет известные системные цвета.

List <>: List allColors = новый список (Enum.GetNames (typeof (KnownColor)));

Array [] string [] allColors = Enum.GetNames (typeof (KnownColor));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...