概述
以下两个方法分别实现可见性和只读属性的动态改变:
void SetPropertyVisibility(object obj, string propertyName, bool visible)
{
Type type = typeof(BrowsableAttribute);
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(obj);
AttributeCollection attrs = props[propertyName].Attributes;
FieldInfo fld = type.GetField("browsable", BindingFlags.Instance | BindingFlags.NonPublic);
fld.SetValue(attrs[type], visible);
}
void SetPropertyReadOnly(object obj, string propertyName, bool readOnly)
{
Type type = typeof(System.ComponentModel.ReadOnlyAttribute);
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(obj);
AttributeCollection attrs = props[propertyName].Attributes;
FieldInfo fld = type.GetField("isReadOnly", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.CreateInstance);
fld.SetValue(attrs[type], readOnly);
}
'上面是cs的代码 以下是自己改的vb代码 测试通过
Function SetPropertyVisibility(ByVal obj As Object, ByVal propertyName As String, ByVal visible As Boolean)
Dim mytype As Type = GetType(BrowsableAttribute)
Dim props As PropertyDescriptorCollection = TypeDescriptor.GetProperties(obj) '得到一个属性集
Dim attrs As AttributeCollection = props(propertyName).Attributes
Dim fld As FieldInfo = mytype.GetField("browsable", BindingFlags.Instance Or BindingFlags.NonPublic)
fld.SetValue(attrs(mytype), visible)
Return Nothing
End Function
'同一个类中调用的话 如下就OK了
SetPropertyVisibility(Me, "属性名称", True)
最后
以上就是腼腆八宝粥为你收集整理的如何在程序运行中动态改变对象属性在PropertyGrid可见性和只读属性的全部内容,希望文章能够帮你解决如何在程序运行中动态改变对象属性在PropertyGrid可见性和只读属性所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复