web-dev-qa-db-fra.com

C # obtenir toutes les couleurs de couleur

Je veux créer une ComboBox avec toutes les couleurs de System.Drawing.Color

Mais je n'arrive pas à rassembler toutes les couleurs de cette collection

J'ai déjà essayé d'utiliser une foreach pour faire le travail comme ceci:

foreach (Color clr in Color)
     {

     }

Mais tout ce que je reçois est une erreur.

Alors, comment puis-je parcourir toutes les couleurs?

Toute aide serait appréciée.

20
Pieter888

Vous pouvez prendre la couleur de KnownColor

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

ou utilisez la réflexion pour éviter les couleurs telles que Menu , Bureau ... contenir dans 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);
}
41
Julien Hoarau

Semblable au code de @ madgnome, mais je préfère ce qui suit car il n’exige pas l’analyse des noms de chaînes (un indirection redondant, à mon avis):

foreach (var colorValue in Enum.GetValues(typeof(KnownColor)))
    Color color = Color.FromKnownColor((KnownColor)colorValue);
13
Konrad Rudolph

Ma façon d'obtenir des couleurs. Je pense que c'est la meilleure solution via la bibliothèque de réflexion.

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;
}
4
Artxzta

Voici ce que je pense que vous voulez:

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

il va parcourir toutes les valeurs standard pour la couleur et devrait fonctionner pour ce dont vous avez besoin

4
Richard J. Ross III

L’exigence était d’avoir une liste des couleurs système à choisir, une liste des couleurs "Web", AKA les couleurs professionnelles, puis RVB via la syntaxe R, G, B et enfin l’utilisation du sélecteur de couleurs pour la complétude.

Je sauvegarde la liste des couleurs et les propriétés de la couleur système pour une utilisation ultérieure. Réduire le nom (couleur) supprime les composants "Couleur [Nom]" de la chaîne. Si vous ne maintenez pas une liste de couleurs courante, vous les verrez apparaître deux fois dans la deuxième liste. Il existe probablement une approche plus élégante à cet égard, mais le temps importait plus que la perfection, comme c'est souvent le cas.

_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

0
Shibumi Tait