如何在C#中在运行时查找控件的默认属性值

Nik*_*hil 5 .net c#

我有一个控件...任何System.Windows.Forms.Control.比如说.标签.

我希望找到名为"Enabled"的属性的默认值(可以是任何属性).我该怎么做?

1)在这种情况下,我们有一个标签.标签的"已启用"属性的默认值为true.

2)现在在运行时,假设我想找出属性"Enabled"的默认值是什么...我该如何找到?

3)首先,我有一个控制对象.从该对象,我只能获取属性"Enabled"的当前值,但不能获取DEFAULT值.

解决这个问题的一种可能方法是:

1)在运行时识别控件的类型.2)使用其默认构造函数初始化它.3)找到我们感兴趣的属性的值(它显然是默认值)并且那里......我们有默认值.

但是,在这种情况下......我不知道我的控制权.我所知道的是,它可以是System.Windows.Forms.Control的任何控件.那么我如何初始化它并得到它的对象呢?可能吗?

您有任何替代解决方案/更好的方法吗?

eko*_*lis 4

这是使用反思的好机会!这是一个方法,它应该获取具有默认构造函数(公共,无参数)的任何类型的任何属性的默认值:

public static object GetDefaultPropertyValue(Type type, string propertyName)
{
        if (type.GetConstructor(new Type[] { }) == null)
            throw new Exception(type + " doesn't have a default constructor, so there is no default instance to get a default property value from.");
        var obj = Activator.CreateInstance(type);
        return type.GetProperty(propertyName).GetValue(obj, new object[] { });
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果您使用大量控件执行此操作,其中可能存在多个单一类型,则您可能需要缓存每种类型的结果,因为反射速度有些慢。