Propertygrid显示多个对象的公共属性

时间:2012-05-10 22:52:13

标签: c# winforms propertygrid

我有一个问题,即propertygrid没有显示多个对象的可扩展属性的父值(使用propertygrid.SelectedObjects)

[Browsable(true), TypeConverter(typeof(ExpandableObjectConverter))]
 public class MyNestedClass {
    private int a;
    private int b;

   [Browsable(true), 
    ReadOnly(false), 
    RefreshProperties(RefreshProperties.Repaint),
    NotifyParentProperty(true)]
   public int A {
      get { return this.a; }
      set { this.a = value; }
   }

   [Browsable(true), 
    ReadOnly(false), 
    RefreshProperties(RefreshProperties.Repaint),
    NotifyParentProperty(true)]
   public int B {
      get { return this.b; }
      set { this.b = value; }
   }


   public MyNestedClass(int a, int b) {
      this.a = a;
      this.b = b;
   }


   public override string ToString() {
      return this.a.ToString() + “; “ + this.b.ToString();
   }
}

此类是另一个类myClass的一部分,其中myNestedClass被定义为其中的可浏览属性。

public class MyClass {
   …
   private MyNestedClass myNestedClassObject;
   …
   [Browsable(true),
    ReadOnly(false), 
    MergableProperty(true),
    RefreshProperties(RefreshProperties.Repaint)]
   public MyNestedClass MyNestedClassObject {
      get { return myNestedClassObject; }
      set { myNestedClassObject = value; }
   }
   …
}

当在propertygrid中只显示一个类myClass的实例时,一切正常。 propertygrid显示:

…
MyNestedClassObject | 1; 2
   A                | 1
   B                | 2
…

在我试图显示MyClass实例数组的情况下(通过propertygrid.SelectedObjects),其中myNestedClass对象确实具有相同的a和b值,我只在propertygrid中看到类似这样的内容:

…
MyNestedClassObject |
   A                | 1
   B                | 2
…

我知道propertygrid只是为了显示多个对象的公共属性,对于子属性a和b都是如此。但是为什么可扩展属性的所谓“typeconverter”(或父级)行确实有一个空值部分,尽管子属性a和b对于所有对象都是相同的?

任何人都可以对此有所了解和/或可以帮助我解决这个问题吗?

非常感谢提前

约亨

1 个答案:

答案 0 :(得分:-1)

经过对该问题的更多研究后,我发现了另一个stackoverflow文章的解决方案:

PropertyGrid mult. controls select, null exception on property set?

当选择了多个对象时,作者在扩展属性方面遇到了同样的问题,其中所有属性对所有实例都是通用的。 “typeconverter”(或父)行保持空白,另一方面显示子属性。

他注意到在类中重写方法Equals,其实例显示在属性网格中。 是的,就是这样。

非常感谢greggorob64!

亲切的问候