我在PropertyBag这个例子里对一个自定义的属性使用了[TypeConverter(ExpandableObjectConverter)],我的自定义属性是可以正常展开了,但是当我展开这个属性,并编辑了其中的一个成员之后,PropertyBag.SetValue并没有给调用,我就无从知道属性已经给修改了,请问这个问题该如何解决?
解决方案 »
- 按钮事件问题
- 从工作行为中辨别他是否是一个有经验的开发者
- 我也抄几题面试的智力题
- 键盘上换个键
- 数据库更新时调试出现:对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成
- 有100个radio控件,name不同,放1个group。要实现点击1个radio控件,就弹出messagebox,显示该radio控件的name。要给每个radio控件的CheckedChanged()写几乎同样代码。有简便方法吗?
- 关于DLL的问题
- 我是菜鸟,遇到了一个datagrid 的错误....谢谢
- 哪里有ComponentOne Studio下载?
- 请问,在click函数中,怎样指导点的是左肩还是右键,点击位置
- 在窗体中怎么滚动图片??
- Remoting访问的问题,请高手不吝赐教
要知道属性修改,应该监视值的变化。如果有现成的事件可用那就更好。
我不知道你说的PropertyGrid是什么,不过应该是这样的。
一般说来,事件应该是OnChange啊OnModify啊这种样子的。
-----------------
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
value = selectionControl.EditValue(context, provider, value); List<MyListViewItem> l = new List<MyListViewItem>();
if (value != null)
{
foreach (MyListViewItem var in (List<MyListViewItem>)value)
{
l.Add(var);
}
}
return l;
}
而修改我自己的属性,也可以调用到PropertyGridInternal.PropertyDescriptorGridEntry.SetPropertyValue(),但第一个参数值却是我自己的属性的类型,然后就不会调用PropertyBag.SetValue,请问有什么办法解决吗?
MyConverter派生自TypeConverter,除了重载ConvertTo,ConvertFrom,CanConverTo,CanverFrom外,还需重载下面3个函数public override bool GetCreateInstanceSupported(ITypeDescriptorContext context)
{
return true;
}
public override PropertyDescriptorCollection GetProperties(
ITypeDescriptorContext context,
object value, Attribute[] attributes)
{
if (value is ButtonColor)
return TypeDescriptor.GetProperties(value, attributes); return base.GetProperties(context, value, attributes);
} public override bool GetPropertiesSupported(ITypeDescriptorContext context)
{
return true;
}