9

我有一个显示列表的属性网格,例如一个类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 = falseHidden(下面突出显示的黄色)被省略时。

截屏

谢谢。

4

1 回答 1

15

这是一个例子:

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 Behavior of Property Grid

于 2012-12-02T20:02:57.243 回答