C # получает все цвета из цвета - PullRequest
20 голосов
/ 29 сентября 2010

Я хочу сделать ComboBox заполненным всеми цветами из System.Drawing.Color

Но я не могу собрать все цвета из этой коллекции

Я ужепопытался использовать foreach для выполнения работы, подобной этой:

foreach (Color clr in Color)
     {

     }

Но все, что я получаю, это ошибка.

Так, как я могу пройти через все цвета?

Любая помощь будет оценена.

Ответы [ 5 ]

42 голосов
/ 29 сентября 2010

Вы можете взять цвет из KnownColor

KnownColor[] colors  = Enum.GetValues(typeof(KnownColor));
foreach(KnownColor knowColor in colors)
{
  Color color = Color.FromKnownColor(knowColor);
}

или использовать отражение, чтобы избежать цвета, такие как Меню , Рабочий стол ... содержатв KnowColor

Type colorType = typeof(System.Drawing.Color);
// We take only static property to avoid properties like Name, IsSystemColor ...
PropertyInfo[] propInfos = colorType.GetProperties(BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.Public);
foreach (PropertyInfo propInfo in propInfos) 
{
  Console.WriteLine(propInfo.Name);
}
13 голосов
/ 29 сентября 2010

Аналогично коду @ madgnome, но я предпочитаю следующее, так как он не требует анализа имен строк (на мой взгляд, избыточная косвенность):

foreach (var colorValue in Enum.GetValues(typeof(KnownColor)))
    Color color = Color.FromKnownColor((KnownColor)colorValue);
4 голосов
/ 28 июня 2015

Мой способ получить цвета.Я думаю, что это лучший способ через библиотеку отражений.

private List<Color> GetAllColors()
{
    List<Color> allColors = new List<Color>();

    foreach (PropertyInfo property in typeof(Color).GetProperties())
    {
        if (property.PropertyType == typeof(Color))
        {
            allColors.Add((Color)property.GetValue(null));
        }
    }

    return allColors;
}
4 голосов
/ 29 сентября 2010

Это то, что, я думаю, вам нужно:

foreach (Color color in new ColorConverter().GetStandardValues())
{
    MessageBox.Show(color.ToString());
}

оно будет перебирать все стандартные значения цвета и должно работать для того, что вам нужно

0 голосов
/ 11 мая 2017

Требовалось иметь список системных цветов на выбор, список «веб» цветов, AKA профессиональные цвета, а затем RGB через синтаксис R, G, B и, наконец, использование цвета. Контроль комплектации для полноты.

Сохраняю список цветов и системных цветовых свойств для последующего использования. ReduceName (цвет) удаляет компоненты «Color [Name]» из строки. Если вы не ведете текущий список цветов, они будут отображаться дважды во втором списке. Вероятно, есть более элегантный подход к этому, но время было важнее, чем идеально, как это часто бывает.

_ListAllColors = new List<Color>();
_SystemColorProperties = typeof(SystemColors).GetProperties();
foreach (PropertyInfo propertyInfo in _SystemColorProperties)
{
    object colorObject = propertyInfo.GetValue(null, null);
    Color color = (Color)colorObject;
    if (!_ListAllColors.Contains(color))
    {
        systemColorsComboBox.Items.Add(ReduceName(color));
        _ListAllColors.Add(color);
    }
}

foreach (KnownColor colorValue in Enum.GetValues(typeof(KnownColor)))
{
    Color color = Color.FromKnownColor(colorValue);

    if (!_ListAllColors.Contains(color))
    {
        professionalColorsComboBox.Items.Add(ReduceName(color));
        _ListAllColors.Add(color);
    }
}

System Colors

Professional Colors

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