我正在编写的应用程序中使用PropertyGrid,以允许用户查看对象的实例,有时还可以对其进行编辑。有时,用户可能会以读/写模式打开文件,在这种模式下,用户可以通过属性网格对文件进行更改。在其他情况下,他们可能会以只读模式打开文件,并且不能通过PropetyGrid对对象进行任何更改。我的类也有动态属性,这些属性是通过实现ICustomTypeDescriptor返回的。这就是为什么我真的想要利用PropertyGrid控件的内置灵活性。
似乎没有一种简单的方法可以将属性网格设置为只读模式。如果我禁用PropertyGrid,这也会阻止用户滚动列表。因此,我认为最好的方法是在运行时将ReadOnlyAttributes添加到属性中。还有别的办法吗?
发布于 2010-02-23 13:05:14
由于您实现的是ICustomTypeDescriptor,因此不需要添加任何属性;您只需在PropertyDescriptor上覆盖IsReadOnly即可。我在想,编写一个中间类型来模仿(通过ICustomTypeDescriptor和TypeConverter)包装的类型,但总是返回只读的PropertyDesciptor实例应该很简单?如果你想要一个例子,请告诉我(尽管它不是微不足道的)。
您可能还想检查一下是否有like this提供的东西构建了它。
发布于 2012-12-05 22:09:26
我已经找到了一个非常快速的解决方案,对于那些不关心属性网格被灰显的人。
TypeDescriptor.AddAttributes(myObject, new Attribute[]{new ReadOnlyAttribute(true)});
propertyGrid1.SelectedObject = myObject;发布于 2010-02-23 09:32:03
我的建议是编写一个从propertygrid控件继承而来的自定义控件,在该自定义控件中,布尔值为readonly,然后覆盖某些内容并检查if(readonly)则取消操作
https://stackoverflow.com/questions/2315288
复制相似问题