显示多个对象的通用属性的属性网格

本文关键字:属性 网格 对象 显示 | 更新日期: 2023-09-27 18:33:53

我有一个问题,属性网格不显示多个对象的可扩展属性的父值(使用属性网格。选定对象(

[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; }
   }
   …
}

当属性网格中仅显示类 myClass 的一个实例时,一切正常。属性网格显示:

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

在这种情况下,我尝试显示MyClass实例数组(通过属性网格。SelectedObjects(,其中 myNestedClass 对象确实具有相同的 a 和 b 值,我只在属性网格中看到这样的东西:

…
MyNestedClassObject |
   A                | 1
   B                | 2
…

我知道属性网格旨在仅显示多个对象的通用属性,对于子属性 a 和 b 也是如此。但是,为什么可扩展属性的所谓"typeconverter"(或父(行确实有一个空值部分,尽管子属性 a 和 b 对于所有对象都是相同的?

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

提前非常感谢

约亨

显示多个对象的通用属性的属性网格

在对这个问题进行更多研究之后,由于另一篇 stackoverflow 文章,我找到了解决方案:

属性网格多。 控件选择,属性集上的空异常?

当选择多个对象时,作者在选择所有属性对所有实例通用的情况下,对可展开属性也有同样的问题。"typeconverter"(或父(行保持空,另一方面显示子属性。

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

非常感谢格雷戈罗布64

亲切的问候