我是靠谱客的博主 腼腆八宝粥,最近开发中收集的这篇文章主要介绍如何在程序运行中动态改变对象属性在PropertyGrid可见性和只读属性,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

以下两个方法分别实现可见性和只读属性的动态改变:

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可见性和只读属性所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(29)

评论列表共有 0 条评论

立即
投稿
返回
顶部