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

C# 如何控制运行时在属性网格中可见的内容?,c#,winforms,propertygrid,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

我有一个显示列表的属性网格,例如类
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
行(下面以黄色突出显示)

谢谢。

以下是一个示例:

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
替换为您的属性名即可。 注意,所有属性都必须具有正在更改的属性(在本例中为可浏览)。如果其中一个属性缺少该属性,类属性的所有都将获得新的属性设置


代码取自此处:。

谢谢您的提示。我还没有成功。我不知道这个片段的最佳位置是什么。我把它放在属性设置器中,但我看不出对我的网格有什么影响。我所期望的是只删除具有
ShowHidden=false
的实例的行,但它会从所有实例中删除该行。我会接受答案,因为它有点像我需要的。代码更改了BrowsableAttribute,但我在网格中看不到更改…我如何在运行时看到更改?@FrancescoDS:您应该能够在运行时看到更改。如果您对这种方法有疑问,请提出新问题。根据向上投票的数量,我认为它对其他人有效。@ja2它隐藏所有属性的原因是,只有当所有属性都具有可浏览属性时,它才有效。源链接提到了这个问题。