【问题标题】:Programmatically hiding properties in a PropertyGrid以编程方式隐藏 PropertyGrid 中的属性
【发布时间】:2010-02-23 16:38:18
【问题描述】:

我希望根据用户在下拉菜单中所做的选择来隐藏/显示属性。我处理得很好,但实际上不能使正确的属性消失。我在网上找到的解决方案主要来自 2005 年,由于我对它的经验很少,我认为如果隐藏属性这么难,我一定是做错了。

到目前为止,我已经尝试在处理事件后访问该属性,但 ReadOnly 和 IsBrowsable 属性是只读的。

propertygrid 有一个属性 BrowsableAttributes,它接受一个 Attribute 列表,但只能消极地工作,不能做 or - only and。提供 ; 的属性集合类别 - 'test' 和 isbrowsable - true;返回同时匹配的那些,并且由于我无法提供多个 AttributeCollections 我无法使搜索足够具体以隐藏必要的搜索同时让其他搜索可见。

在过去的几个小时里,我一直在用头撞墙,认为一定有更简单的方法。

【问题讨论】:

标签: c# .net windows propertygrid


【解决方案1】:

您是否尝试过将此属性应用于属性:

[可浏览(假)] 公共对象 SomeProperty{ }

这样SomeProperty 将不会出现在属性网格上。

【讨论】:

  • 是的,一开始可以,但我需要能够在下拉值更改时禁用/启用。
  • @Tom:顺便说一句,您知道您可以将自定义描述应用于属性...'[Description("some description for SomeProperty")]'....
【解决方案2】:

要在此处执行您想做的事情,您需要在您的类上实现 ICustomTypeDescriptor,PropertyGrid 将使用它来查询您的类/对象以找出要在 PropertyGrid 中显示的项目,如何编辑他们,他们应该有什么类别/描述,等等。

它可能会变得非常混乱,但似乎在 http://www.codeproject.com/KB/grid/PropertyGridDynamicProp.aspx 的代码项目中为您预先编写了一组帮助程序类。

我开始编写我自己版本的代码项目中给出的代码,在遇到障碍后,我进行了一些谷歌搜索并想出了代码项目链接。看起来他们做得比我好很多。我已经下载了代码,它似乎工作得很好。

如果它不能解决您的问题,请告诉我,我会深入挖掘。

【讨论】:

    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2011-12-03
    • 1970-01-01
    • 2019-01-07
    • 2019-12-24
    • 2013-03-09
    相关资源
    最近更新 更多