С# получение всех цветов от цвета
Я хочу сделать ComboBox
заполненным всеми цветами от System.Drawing.Color
Но я не могу собрать все цвета из этой коллекции
Я уже пробовал использовать foreach
для выполнения этой задачи следующим образом:
foreach (Color clr in Color)
{
}
Но все, что я получаю, это ошибка.
Итак, как я могу зацикливаться на всех цветах?
Любая помощь будет оценена.
Ответы
Ответ 1
Вы можете взять цвет 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);
}
Ответ 2
Как и код @madgnomes, но я предпочитаю следующее, так как он не требует синтаксического анализа имен строк (на мой взгляд, избыточной косвенности):
foreach (var colorValue in Enum.GetValues(typeof(KnownColor)))
Color color = Color.FromKnownColor((KnownColor)colorValue);
Ответ 3
Это то, что я думаю, вы хотите:
foreach (Color color in new ColorConverter().GetStandardValues())
{
MessageBox.Show(color.ToString());
}
он будет проходить через все стандартные значения для цвета и должен работать для того, что вам нужно
Ответ 4
Мой способ получить цвета. Я думаю, что это лучший способ через библиотеку Reflection.
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;
}
Ответ 5
Требование состояло в том, чтобы иметь список системных цветов для выбора, список "веб-цветов", AKA - профессиональные цвета, а затем RGB через синтаксис R, G, B и, наконец, использование цвета управление сборщиком для полноты.
Я сохраняю список цветов и свойств цвета системы для использования позже. The ReduceName (цвет) удаляет компоненты "Цвет [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);
}
}
![Цвета системы]()
![Профессиональные цвета]()