Comment lister les couleurs de System.Drawing.KnownColor avec C# (et joyeux Noël!)

Je travaillais à développer une fonctionnalité de calendrier pour un projet. Il s’agissait de mettre en place une grille d’activité sur une plage horaire d’une semaine de travail en utilisant le composant Scheduler de KendoUI. Cette partie s’est super bien déroulée. Comme planifié. Rien à signaler de ce côté.

Or, au moment où je développais mon petit bout de fonctionnalité, la palette de couleur qui permet d’identifier les différents éléments composant le calendrier n’était pas encore établie.

Alors, quoi faire dans ce cas-là? Je suis particulièrement pathétique lorsqu’il est temps de faire usage d’une créativité artistique. Ma solution devait être aussi jetable et de courte durée, car j’allais recevoir la palette de couleur à utiliser en cours d’itération.

Dans ce cas, je me suis dit qu’il fallait avoir recours à System.Drawing.KnownColor afin d’utiliser leur code hexadécimal pour les utiliser en CSS. Qu’est-ce que System.Drawing.KnownColor? Il s’agit d’une énumération qui identifie les couleurs système de Windows. Elles sont laides et peu originales, mais ce sont des couleurs qu’il est possible de référencer avec du code.


var names = (KnownColor[])Enum.GetValues(typeof(KnownColor));
var namesList = names.ToList();
//Retirer ceux que vous considérez indésirables
namesList.Remove(KnownColor.White);
namesList.Remove(KnownColor.HighlightText);
namesList.Remove(KnownColor.ControlLight);
namesList.Remove(KnownColor.ControlLightLight);
names = namesList
    .OrderByDescending(p => Guid.NewGuid())
    .ToArray();
var randomColorName = names[index];
var randomColor = Color.FromKnownColor(randomColorName);
return "#" + randomColor.R.ToString("X2") + randomColor.G.ToString("X2") + randomColor.B.ToString("X2");

view raw

known-color.cs

hosted with ❤ by GitHub

C’est un peu simplet, mais ça fait le travail, comme on dit. Il est à noter que je procède à un tri en utilisant un GUID unique afin d’obtenir un jeu de couleur différent à chaque utilisation.

Le petit bonus est que la couleur est convertie en son équivalent hexadécimal pouvant être utilisé dans un style CSS (ex.: « #4D5B32 ») grâce à la dernière ligne du code. Il s’agit d’extraire la composante rouge, verte et bleue de la couleur et transformer sa valeur hexadécimale (l’utilisation du motif « X2 » de ToString()).

~~

En cette veille de Noël, je profite de cette occasion pour vous dire merci et vous souhaite tous de passer de joyeuses fêtes! Profitez en bien!