Color struct contains all web colors as constants (system colors are defined as constants in the SystemColors class)
To get a list of these colors, simply do:
var webColors = GetConstants(typeof(Color)); var sysColors = GetConstants(typeof(SystemColors));
having GetConstants defined as follows:
static List<Color> GetConstants(Type enumType) { MethodAttributes attributes = MethodAttributes.Static | MethodAttributes.Public; PropertyInfo[] properties = enumType.GetProperties(); List<Color> list = new List<Color>(); for (int i = 0; i < properties.Length; i++) { PropertyInfo info = properties[i]; if (info.PropertyType == typeof(Color)) { MethodInfo getMethod = info.GetGetMethod(); if ((getMethod != null) && ((getMethod.Attributes & attributes) == attributes)) { object[] index = null; list.Add((Color)info.GetValue(null, index)); } } } return list; }
EDIT:
To get colors sorted exactly the same as in VS, do:
var webColors = GetConstants(typeof(Color)); var sysColors = GetConstants(typeof(SystemColors)); webColors.Sort(new StandardColorComparer()); sysColors.Sort(new SystemColorComparer());
with StandardColorComparer and SystemColorComparer defined as follows:
class StandardColorComparer : IComparer<Color> { // Methods public int Compare(Color color, Color color2) { if (color.A < color2.A) { return -1; } if (color.A > color2.A) { return 1; } if (color.GetHue() < color2.GetHue()) { return -1; } if (color.GetHue() > color2.GetHue()) { return 1; } if (color.GetSaturation() < color2.GetSaturation()) { return -1; } if (color.GetSaturation() > color2.GetSaturation()) { return 1; } if (color.GetBrightness() < color2.GetBrightness()) { return -1; } if (color.GetBrightness() > color2.GetBrightness()) { return 1; } return 0; } } class SystemColorComparer : IComparer<Color> { // Methods public int Compare(Color color, Color color2) { return string.Compare(color.Name, color2.Name, false, CultureInfo.InvariantCulture); } }
NB:
This code was taken from System.Drawing.Design.ColorEditor through a reflector.
digEmAll
source share