0

我需要在我的项目中使用 propertygrid,我需要过滤将显示的属性。我找到了一种按类别过滤属性网格的方法,但是在过滤它时我需要更深入。

这是仅显示“外观”类别的代码。但我需要禁用“外观”下的一些属性,如“BackColor”

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

我怎样才能过滤掉Backcolor?

4

2 回答 2

1

如果您想静态禁用此道具,例如在编译时,您可以尝试这种方法。将它们设置为不可见运行时比较复杂,因此请查看动态属性设置

于 2013-08-05T08:48:08.550 回答
1

我通常使用此方法在 PropertyGrid 中动态显示/隐藏属性(使用Reflection):

public void ShowValue(string _Who, bool _Enabled)
{
    BrowsableAttribute attribute = (BrowsableAttribute)TypeDescriptor.GetProperties(this.GetType())(_Who).Attributes(typeof(BrowsableAttribute));
    System.Reflection.FieldInfo fieldToChange = attribute.GetType().GetField("Browsable", Reflection.BindingFlags.NonPublic | Reflection.BindingFlags.Instance | Reflection.BindingFlags.Public | Reflection.BindingFlags.Static | Reflection.BindingFlags.IgnoreCase);
    fieldToChange.SetValue(attribute, _Enabled);
      //Refresh the Property Grid
    PG.Refresh();
}

参数是:

  • _Who : 要动态更改的属性名称
  • _Enabled : true 显示或 false 隐藏 PropertyGrid 中的属性

我使用的 PropertyGrid 的名称是PG. 更改后我需要刷新它。

此方法应属于SelectedObjectPropertyGrid 中使用的类。

于 2014-07-30T14:33:23.553 回答