你如何控制一下在运行时属性网格是可见的?(How do you control what is vi

2019-08-03 10:44发布

我有一个属性网格显示列表,例如一类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线(高亮下面黄色)被省略。

谢谢。

Answer 1:

下面是一个例子:

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与属性名。 请注意,所有属性必须被改变的属性(在这种情况下,可在线浏览)。 如果其中一个属性缺少属性, 所有的类属性的获得新的属性设置。

从这里取代码: 探索属性网格的行为 。



文章来源: How do you control what is visible in a property grid at runtime?