首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只读PropertyGrid

只读PropertyGrid
EN

Stack Overflow用户
提问于 2010-02-23 08:16:05
回答 5查看 8.6K关注 0票数 7

我正在编写的应用程序中使用PropertyGrid,以允许用户查看对象的实例,有时还可以对其进行编辑。有时,用户可能会以读/写模式打开文件,在这种模式下,用户可以通过属性网格对文件进行更改。在其他情况下,他们可能会以只读模式打开文件,并且不能通过PropetyGrid对对象进行任何更改。我的类也有动态属性,这些属性是通过实现ICustomTypeDescriptor返回的。这就是为什么我真的想要利用PropertyGrid控件的内置灵活性。

似乎没有一种简单的方法可以将属性网格设置为只读模式。如果我禁用PropertyGrid,这也会阻止用户滚动列表。因此,我认为最好的方法是在运行时将ReadOnlyAttributes添加到属性中。还有别的办法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-23 13:05:14

由于您实现的是ICustomTypeDescriptor,因此不需要添加任何属性;您只需在PropertyDescriptor上覆盖IsReadOnly即可。我在想,编写一个中间类型来模仿(通过ICustomTypeDescriptorTypeConverter)包装的类型,但总是返回只读的PropertyDesciptor实例应该很简单?如果你想要一个例子,请告诉我(尽管它不是微不足道的)。

您可能还想检查一下是否有like this提供的东西构建了它。

票数 3
EN

Stack Overflow用户

发布于 2012-12-05 22:09:26

我已经找到了一个非常快速的解决方案,对于那些不关心属性网格被灰显的人。

代码语言:javascript
复制
TypeDescriptor.AddAttributes(myObject, new Attribute[]{new ReadOnlyAttribute(true)});
propertyGrid1.SelectedObject = myObject;
票数 16
EN

Stack Overflow用户

发布于 2010-02-23 09:32:03

我的建议是编写一个从propertygrid控件继承而来的自定义控件,在该自定义控件中,布尔值为readonly,然后覆盖某些内容并检查if(readonly)则取消操作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2315288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档