2008-11-10 11 views

Odpowiedz

19

Więc chcesz zrobić:

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

... aby uzyskać tablicę wszystkich collors.

Lub ... Można użyć odbicia, aby uzyskać tylko kolory. KnownColors zawiera elementy takie jak "Menu", kolor menu systemowych itp. Może nie być to, co chcesz. Tak więc, aby dostać się tylko nazwy kolorów w System.Drawing.Color, można użyć refleksji:

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); 
} 

To pisze wszystkie kolory, ale można łatwo dostosować go do nazwy kolorów dodaj do listy .

Zobacz ten projekt Code Project pod numerem building a color chart.

1

W System.Drawing znajduje się Enum KnownColor, określa on znane kolory systemowe.

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

Array [] string [] allColors = Enum.GetNames (typeof (KnownColor));

6

Spróbuj tego:

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

Oprócz tego, co jons911 powiedział, jeśli chcesz tylko „named” kolory i nie kolorów systemowych jak „ActiveBorder” klasa Color ma właściwość IsSystemColor że można użyj, aby je odfiltrować.

1

Here to strona internetowa, która pokazuje poręczną próbkę każdego koloru wraz z nazwą.

1

Będziesz musiał użyć odbicia, aby uzyskać kolory ze struktury System.Drawing.Color.

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

Większość odpowiedzi daje w wyniku kolekcję nazw kolorów (ciągów znaków) zamiast obiektów System.Drawing.Color. Jeśli potrzebujesz kolekcji rzeczywistych kolorów systemu, użyj:

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)); 
} 
Powiązane problemy