C# 列出所有系统颜色

C# 列出所有系统颜色,c#,gdi+,systemcolors,C#,Gdi+,Systemcolors,在Windows.Forms中,我需要创建一个接受任何颜色的程序,并尝试找到与之对应的系统颜色 我不知道如何循环使用System.Drawing.SystemColors类的所有颜色-它是一个类,不是枚举或列表 我怎样才能做到这一点(某种反思?)怎么样 public static Dictionary<string,object> GetStaticPropertyBag(Type t) { const BindingFlags flags = BindingFlags.St

在Windows.Forms中,我需要创建一个接受任何颜色的程序,并尝试找到与之对应的系统颜色

我不知道如何循环使用System.Drawing.SystemColors类的所有颜色-它是一个类,不是枚举或列表

我怎样才能做到这一点(某种反思?)

怎么样

public static Dictionary<string,object> GetStaticPropertyBag(Type t)
{
    const BindingFlags flags = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

    var map = new Dictionary<string, object>();
    foreach (var prop in t.GetProperties(flags))
    {
        map[prop.Name] = prop.GetValue(null, null);
    }
    return map;
}
怎么样

public static Dictionary<string,object> GetStaticPropertyBag(Type t)
{
    const BindingFlags flags = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

    var map = new Dictionary<string, object>();
    foreach (var prop in t.GetProperties(flags))
    {
        map[prop.Name] = prop.GetValue(null, null);
    }
    return map;
}

我做了点什么

var typeToCheckTo = typeof(System.Drawing.Color);
var type = typeof(System.Drawing.SystemColors);
var fields = type.GetProperties(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public).Where(p => p.PropertyType.Equals(typeToCheckTo));
foreach (var field in fields)
{
    Console.WriteLine(field.Name + field.GetValue(null, null));
}

我做了点什么

var typeToCheckTo = typeof(System.Drawing.Color);
var type = typeof(System.Drawing.SystemColors);
var fields = type.GetProperties(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public).Where(p => p.PropertyType.Equals(typeToCheckTo));
foreach (var field in fields)
{
    Console.WriteLine(field.Name + field.GetValue(null, null));
}

事实上,通过反思,让我看看我是否能做些什么。你可能想看看这里:或者这里:还有一个:希望它有帮助。“相应的系统颜色”-你只能使用它们?使用或任何其他
颜色
转换,您可以使用任何现有颜色…事实上,通过反射,让我看看是否可以制作一些东西。您可能想看看这里:或这里:还有一个:希望有帮助。“相应的系统颜色”-您只能使用这些颜色?使用或任何其他
颜色
转换,您可以使用任何现有颜色…谢谢,我已经在使用上述解决方案,但是,关于这一个,只有一个问题:对我来说,他似乎正在使用所有的标准颜色,而不是特殊的系统颜色(如“渐变激活选项”、“灰色文本”、“按钮面”等)我需要什么?我现在使用linq检查所有
System.Drawing.SystemColors
,并且只检查类型为
System.Drawing.Color
的静态属性。因此,您需要使用System.Linq添加
在您的文档顶部。谢谢,我已经在使用上面的解决方案,但是,关于这个问题,只有一个问题:对我来说,看起来他正在使用所有的标准颜色,而不是特殊的系统颜色(如“GradientActivityOption”、“GrayText”、“ButtonFace”等)我需要什么?我现在使用linq检查所有
System.Drawing.SystemColors
,并且只检查类型为
System.Drawing.Color
的静态属性。因此,您需要使用System.Linq添加
位于文档顶部。