Winform PropertyGrid控件 动态修改Category 和Description
求大虾帮忙啊,http://blog.csdn.net/luyifeiniu/article/details/5426960连接中的内容我已看过,动态修改DisplayName已经实现,但是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 C# ?PropertyGrid控件 Category?Description Category? 属性描述和分类
[解决办法]
不是你这样做的(产生的问题可能比你要解决还多)。
某些应用,比如PropertyGrid,GridDataView等认识ICustomTypeDescriptor,并接受ICustomTypeDescriptor提供有关的类型信息,具体使用可以搜索(ICustomTypeDescriptor+PropertyGrid)。
[解决办法]
最后那两段的写法是不好的,不能直接操作私有字段,那样会有很多问题产生。
正确的做法应该是自定义TypeDescriptionProvider,通过TypeDescriptor.AddProvider方法添加自定义的TypeDescriptionProvider来实现指定类型的干预。