.net - 以编程方式隐藏 PropertyGrid 中的字段

标签 .net vb.net attributes propertygrid componentmodel

使用

<System.ComponentModel.TypeConverter(GetType(System.ComponentModel.ExpandableObjectConverter))> _

在由多个属性组成的类(它是另一个类的属性)的声明上。

我简单地加载了这个类的一个实例......
PropertyGrid1.SelectedObject = oColumn

显然我不想在代码中手动构建 propertygrid,我知道如何做到这一点。

但问题就在这里。根据属性的值,某些其他属性不应该是可见的,就好像我使用了
<System.ComponentModel.Browsable(False)> _

属性声明上的属性。

无论如何以编程方式执行此操作,而无需手动处理属性网格的所有构建>

最佳答案

其实这是完全有可能的。第一种也是最简单的方法是设置网格的 BrowsableAttributes 属性:

propGraph.BrowsableAttributes = new AttributeCollection(
    new Attribute[] 
    { 
        new CategoryAttribute("Appearance")
    });

这将过滤掉与您提供的属性类型不匹配的所有属性。不幸的是,这是一个正过滤器而不是一个负过滤器,这使得恕我直言它不太有用。

其次,同样简单,您可以围绕要在 PropertyGrid 中显示的对象创建一个简单的包装器,并重新定义要隐藏的任何属性/等。作为直通属性:
public class MyDerivedControl : public TextBox
{
    [Browsable(false)]
    [Category("MyCustomCategory")]
    public new bool Enabled
    {
         get { return base.Enabled }
         set { base.Enabled = value; }
    }
}

将其弹出到属性网格中,然后 Enabled 属性将被隐藏。

第三,您可以自定义 PropertyGrid 本身并进入类型描述符等领域,但如果您只想隐藏几个属性,这有点过头了。

希望这可以帮助。

关于.net - 以编程方式隐藏 PropertyGrid 中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/626803/

相关文章:

vb.net - 运行后台线程以加快执行时间的 WCF 服务

.net - 如何在文件路径中创建带有变量的文件?

javascript - 如何使用 JQuery 根据文本值将不同的属性分配给同一类的多个元素

Python静态方法,为什么?

.net - .NET 中用于通过不可靠 (3G) 网络连接发送数据的最佳设计是什么?

c# - 在 Vista/Win7 上设置默认浏览器

.net - 使用 .Net 开发 Robocode 类型的游戏,用于学校作业

c# - HttpWebRequest 1个url,2个目标ip

.net - 在 LINQ 中与匿名类型不同(在 VB.NET 中)

java - 没有找到适合 println 的方法... Java