如何在运行时控制属性网格中可见的内容?

时间:2012-12-02 19:48:46

标签: c# winforms propertygrid

我有一个显示列表的属性网格,例如类Person

[TypeConverter(typeof(ExpandableObjectConverter))]
public class Person
{
    public bool ShowHidden { get; set; }
    public string Name { get; set; }
    //[Browsable(false)]
    public string Hidden { get; set; }

    public override string ToString()
    {
        return string.Format("Person({0})", Name);
    }
}

问题是我如何在运行时控制Browsable()属性,以便在ShowHidden = false时省略Hidden行(下面突出显示为黄色)。

Screenshot

感谢。

1 个答案:

答案 0 :(得分:12)

以下是一个例子:

PropertyDescriptor descriptor=
  TypeDescriptor.GetProperties(this.GetType())["DataType"];
BrowsableAttribute attrib= 
  (BrowsableAttribute)descriptor.Attributes[typeof(BrowsableAttribute)]; 
FieldInfo isBrow = 
  attrib.GetType().GetField("browsable",BindingFlags.NonPublic | BindingFlags.Instance);
isBrow.SetValue(attrib,false);

只需将DataType替换为您的媒体资源名称即可。 请注意,所有属性都必须更改属性(在本例中为Browsable)。如果其中一个属性缺少该属性,则类属性的全部将获得新的属性设置。

从此处获取的代码:Exploring the Behaviour of Property Grid