C#从Color中获取所有颜色

我想让ComboBox填充System.Drawing.Color所有颜色

但我似乎无法从该系列中收集所有颜色

我已经尝试过使用foreach来完成这样的工作:

 foreach (Color clr in Color) { } 

但我得到的只是一个错误。

那我怎么能循环所有的颜色呢?

任何帮助将不胜感激。

你可以从KnownColor中获取颜色

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

或者使用reflection来避免像MenuDesktop …这样的颜色包含在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); } 

类似于@ madgnome的代码,但我更喜欢以下内容,因为它不需要解析字符串名称(在我看来是冗余间接):

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

这就是我想你想要的:

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

它将遍历所有标准的颜色值,并且应该适合您的需要

我得到颜色的方式。 我认为这是通过Reflection库的最佳方式。

 private List GetAllColors() { List allColors = new List(); foreach (PropertyInfo property in typeof(Color).GetProperties()) { if (property.PropertyType == typeof(Color)) { allColors.Add((Color)property.GetValue(null)); } } return allColors; } 

要求是有一个系统颜色列表可供选择,一个“网络”颜色列表,AKA专业颜色,然后通过R,G,B语法RGB,最后使用颜色选择器控件完整性。

我保存颜色列表和系统颜色属性供以后使用。 ReduceName(颜色)从字符串中删除“Color [Name]”组件。 如果您没有维护颜色的运行列表,则会在第二个列表中显示两次。 可能有更优雅的方法来处理,但时间比完美更重要,通常情况下。

 _ListAllColors = new List(); _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); } } 

系统颜色

专业色彩