hexadecimal - system.drawing.color c#
C#obteniendo todos los colores del color (5)
El requisito era tener una lista de los colores del sistema para elegir, una lista de los colores "web", AKA los colores profesionales, y luego RGB a través de la sintaxis R, G, B, y finalmente el uso del control del selector de color para lo completo.
Guardo la lista de colores y las propiedades de color del sistema para usar más tarde. ReduceName (color) elimina los componentes de "Color [Nombre]" de la cadena. Si no mantiene una lista de colores en ejecución, hará que aparezcan dos veces en la segunda lista. Probablemente haya un enfoque más elegante para manejar eso, pero el tiempo era más importante que perfecto, como suele ser el caso.
_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);
}
}
Quiero hacer un ComboBox
lleno de todos los colores de System.Drawing.Color
Pero parece que no puedo coleccionar todos los colores de esa colección.
Ya he intentado usar un foreach
para hacer el trabajo así:
foreach (Color clr in Color)
{
}
Pero todo lo que consigo es un error.
Entonces, ¿cómo puedo hacer un bucle a través de todos los colores?
Cualquier ayuda será apreciada.
Esto es lo que creo que quieres:
foreach (Color color in new ColorConverter().GetStandardValues())
{
MessageBox.Show(color.ToString());
}
Recorrerá todos los valores estándar para el color y debería funcionar para lo que necesite.
Mi manera de conseguir colores. Creo que es la mejor manera a través de la biblioteca de reflexión.
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;
}
Puedes tomar color de KnownColor
KnownColor[] colors = Enum.GetValues(typeof(KnownColor));
foreach(KnownColor knowColor in colors)
{
Color color = Color.FromKnownColor(knowColor);
}
o usa la reflexión para evitar el color como Menu , Desktop ... contiene en 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);
}
Similar al código de @madgnome, pero prefiero lo siguiente, ya que no requiere analizar los nombres de las cadenas (una dirección indirecta redundante, en mi opinión):
foreach (var colorValue in Enum.GetValues(typeof(KnownColor)))
Color color = Color.FromKnownColor((KnownColor)colorValue);