2008-11-10 17 views

Respuesta

19

Por lo que haría:

string[] colors = Enum.GetNames(typeof(System.Drawing.KnownColor)); 

... para obtener una matriz de todos los collors.

O ... Podría usar el reflejo para obtener los colores. KnownColors incluye elementos como "Menú", el color de los menús del sistema, etc. Esto podría no ser lo que deseaba. Por lo tanto, para obtener sólo los nombres de los colores en System.Drawing.Color, se podría utilizar la reflexión:

Type colorType = typeof(System.Drawing.Color); 

PropertyInfo[] propInfoList = colorType.GetProperties(BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.Public); 

foreach (System.Reflection.PropertyInfo c in propInfoList) { 
    Console.WriteLine(c.Name); 
} 

Esto escribe a cabo todos los colores, pero fácilmente se podría adaptar para añadir los nombres de los colores a una lista .

Consulte este proyecto de proyecto de código en building a color chart.

1

En System.Drawing hay un Enum KnownColor que especifica los colores conocidos del sistema.

Lista <>: Lista allColors = new List (Enum.GetNames (typeof (KnownColor)));

Matriz [] cadena [] allColors = Enum.GetNames (typeof (KnownColor));

6

Prueba esto:

foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor))) 
{ 
    Trace.WriteLine(string.Format("{0}", knownColor)); 
} 
4

Además de lo jons911 dicho, si sólo desea que los colores "con nombre" y no los colores sistema como "ActiveBorder", la clase Color tiene una propiedad IsSystemColor que pueda utilizar para filtrarlos.

1

Here es una página en línea que muestra una muestra útil de cada color junto con su nombre.

1

Deberá usar el reflejo para obtener los colores de System.Drawing.Color struct.

System.Collections.Generic.List<string> colors = 
     new System.Collections.Generic.List<string>(); 
Type t = typeof(System.Drawing.Color); 
System.Reflection.PropertyInfo[] infos = t.GetProperties(); 
foreach (System.Reflection.PropertyInfo info in infos) 
    if (info.PropertyType == typeof(System.Drawing.Color)) 
     colors.Add(info.Name); 
4

La mayoría de las respuestas aquí resultan en una colección de nombres de colores (cadenas) en lugar de objetos System.Drawing.Color. Si necesita una colección de colores reales del sistema, use esto:

using System.Collections.Generic; 
using System.Drawing; 
using System.Linq; 
... 
static IEnumerable<Color> GetSystemColors() { 
    Type type = typeof(Color); 
    return type.GetProperties().Where(info => info.PropertyType == type).Select(info => (Color)info.GetValue(null, null)); 
} 
Cuestiones relacionadas