我使用以下代码获取对象的所有实例:
Type type = this.GetType();
FieldInfo[] fields = type.GetFields(BindingFlags.NonPublic |
BindingFlags.Instance);
但是我无法更改Enabled
等按钮的属性
因为SetValue
获得实例类的目标而我没有这个。我只有名字和类型。
现在如何更改字段中存在的对象的属性(已启用)。
答案 0 :(得分:1)
尝试稍微修改您的反射代码。首先,您必须引用对象和您特别想要的property
。请注意,Property
与Field
不同。
MyObject.GetType().GetProperty("Enabled").SetValue(MyObject, bEnabled, null);
你使用MyObject
的类型,是一个按钮或一个表单或其他...然后你按名称Enabled
引用属性,然后你将它设置为{{1} }}
如果您想事先获取属性,可以将实例存储在变量中,但请再次记住属性不是字段。
MyObject
您可以使用PropertyInfo[] piSet = MyObject.GetType().GetProperties();
获取属性集,但如果this
与您尝试启用/禁用的控件不同this
,则不建议使用此属性。
添加了修改
在重新阅读问题后,我得到了这个:你似乎想要的是多层反射和泛型。您正在寻找的控件是附加到“this”的字段。你能做的就是这些。
Type
答案 1 :(得分:0)
首先,您实际上正在使用对象的字段。如果你真的想要可写属性,那么你需要这样的东西:
PropertyInfo[] properties = type.GetProperties(Public | SetProperty | Instance);
完成后,您的启用属性可能因此设置:
myenabledPropertyInfo.SetValue(targetObject, value, null);
其中targetobject是我们感兴趣的Enabled属性的对象,value是我们希望赋值的值(在这种情况下,可能是布尔值...)
希望有帮助...