2010-09-29 17 views
19

bekommen Ich möchte ein ComboBox mit allen Farben von System.Drawing.ColorC# Alle Farben von Farbe

gefüllt machen, aber ich kann nicht alle Farben scheinen aus dieser Sammlung zu sammeln

ich schon versucht, mit ein foreach den Job wie dies zu tun:

foreach (Color clr in Color) 
    { 

    } 

Aber alles, was ich bekommen, ist ein Fehler.

Also wie kann ich alle Farben durchlaufen?

Jede Hilfe wird geschätzt.

Antwort

33

Sie könnten nehmen Farbe von KnownColor

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

oder Verwendung Reflexionsfarbe zu vermeiden wie Menü, Desktop ... enthalten in 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

Vielen Dank! Das war genau das, was ich brauchte. Ich hätte mich einfach für alle Farben entschieden und dann einen Weg gefunden, sie zu filtern, um die Menü- und Desktopfarben selbst zu vermeiden. Vielen Dank! – Pieter888

3

Dies ist, was ich Sie denken, wollen:

foreach (Color color in new ColorConverter().GetStandardValues()) 
{ 
    MessageBox.Show(color.ToString()); 
} 

es wird eine Schleife durch die alle Standardwerte für die Farbe und die Arbeit sollte für das, was Sie @ madgnome Code

12

Ähnliche müssen, aber ich ziehe die folgenden, da es die Zeichenfolge Namen Parsen (eine redundante indirection nicht erforderlich macht, meiner Meinung nach):

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

Es fehlt ")" am Ende der ersten Zeile – Butzke

+0

@Butzke danke, behoben. –

3

Mein Weg, um Farben zu bekommen. Ich denke es ist der beste Weg über die Reflection Bibliothek.

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

Die Anforderung war eine Liste der Systemfarben zu haben, aus, eine Liste der „web“ Farben, auch bekannt als die professionellen Farben und dann RGB über R, G, B-Syntax, und schließlich entscheidet sie die Verwendung der Farbwählersteuerung zur Vollständigkeit.

Ich speichere die Liste der Farben und Systemfarbeigenschaften zur späteren Verwendung. Der ReduceName (Farbe) entfernt die "Color [Name]" - Komponenten aus der Zeichenfolge. Wenn Sie keine laufende Liste der Farben verwalten, werden sie in der zweiten Liste zweimal angezeigt. Es gibt wahrscheinlich eine elegantere Herangehensweise, aber die Zeit war wichtiger als perfekt, wie es oft der Fall ist.

_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