C#从Color中获取所有颜色

Pie*_*888 20 c# arrays collections loops colors

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

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

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

foreach (Color clr in Color)
     {

     }
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助将不胜感激.

Jul*_*rau 42

你可以从KnownColor中获取颜色

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

或使用反射来避免颜色,如Menu,Desktop ...包含在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);
}
Run Code Online (Sandbox Code Playgroud)


Kon*_*lph 13

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

foreach (var colorValue in Enum.GetValues(typeof(KnownColor)))
    Color color = Color.FromKnownColor((KnownColor)colorValue);
Run Code Online (Sandbox Code Playgroud)


小智 5

我获得色彩的方式。我认为这是通过反射库的最佳方法。

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;
}
Run Code Online (Sandbox Code Playgroud)