2010-09-29 10 views
19

Quiero hacer una ComboBox lleno con todos los colores del System.Drawing.ColorC# conseguir todos los colores del color

Pero me parece que no puede recoger todos los colores de esa colección

ya he intentado usar un foreach para hacer el trabajo de esta manera:

foreach (Color clr in Color) 
    { 

    } 

Pero todo lo que consigo es un error.

Entonces, ¿cómo puedo recorrer todos los colores?

Cualquier ayuda será apreciada.

Respuesta

33

Usted podría tomar color desde KnownColor

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

o uso para evitar la reflexión de color como Menú, escritorio ... contienen 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); 
} 
+0

Gracias! esto era exactamente lo que necesitaba. Me hubiera conformado con simplemente todos los colores y luego encontrar una manera de filtrarlos para evitar el menú y los colores del escritorio yo mismo. ¡Muchas gracias! – Pieter888

3

Esto es lo que yo creo que querer:

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 necesita

12

Similar al código de @ madgnome, pero prefiero el siguiente ya que no requiere analizar los nombres de las cadenas (una indirección redundante, en mi opinión):

foreach (var colorValue in Enum.GetValues(typeof(KnownColor))) 
    Color color = Color.FromKnownColor((KnownColor)colorValue); 
+0

Falta ")" al final de la primera línea – Butzke

+0

@Butzke gracias, arreglado. –

3

Mi manera de obtener colores. Creo que es la mejor manera a través de la biblioteca 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; 
} 
0

El requisito era tener una lista de los colores del sistema para elegir, una lista de los colores "web", también conocido como los colores profesionales, y luego RGB a través de R, G, la sintaxis B, y finalmente el uso del control del selector de color para que esté completo.

Guardo la lista de colores y las propiedades de color del sistema para su uso posterior. El Nombre Reducido (color) elimina los componentes "Color [Nombre]" de la cadena. Si no mantiene una lista de colores en ejecución, los mostrará 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); 
    } 
} 

System Colors

Professional Colors

Cuestiones relacionadas