Требовалось иметь список системных цветов на выбор, список «веб» цветов, 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);
}
}