Winform PropertyGrid控件动态修改Category

.Net技术 码拜 10年前 (2014-12-11) 4634次浏览 0个评论

动态修改DisplayName已经实现(参考http://blog.csdn.net/luyifeiniu/article/details/5426960),但是Category 和Description无法实现,我仿照他(她)得最后哪两段代码写了如下代码

 /// <summary>
        /// 设置属性要显示的描述
        /// </summary>
        /// <param name="obj">属性所属的类</param>
        /// <param name="propertyName">属性</param>
        /// <param name="value">描述</param>
        public static void SetPropertyDescription(ref object obj, string propertyName, string value)
        {
            Type type = typeof(System.ComponentModel.DescriptionAttribute);
            PropertyDescriptorCollection props = TypeDescriptor.GetProperties(obj);
            AttributeCollection attrs = props[propertyName].Attributes;
            FieldInfo fld = type.GetField("description", BindingFlags.Instance | BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
        
            fld.SetValue(attrs[type], value);        
        }
        /// <summary>
        /// 设置属性的分类依据
        /// </summary>
        /// <param name="obj">属性所属的类</param>
        /// <param name="propertyName">属性</param>
        /// <param name="value">名称</param>
        public static void SetPropertyCategory(object obj, string propertyName, string value)
        {
            Type type = typeof(System.ComponentModel.CategoryAttribute);
            PropertyDescriptorCollection props = TypeDescriptor.GetProperties(obj);
            AttributeCollection attrs = props[propertyName].Attributes;
            FieldInfo fld = type.GetField("CategoryValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
          
            fld.SetValue(attrs[type], value);          
        }

代码运行不报错,,但是只会显示修改前的值,,求大虾帮忙如何实现修改动态修改Category 和Description


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Winform PropertyGrid控件动态修改Category
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!