PropertyGrid 如何实现复杂属性展开
比如:class A
{
    string name;
    int age;
    
    public string Name
    {
        get { return name; }
        set { name = value; }
    }    public int Age
    {
        get { return age; }
        set { age = value; }
    }
}class B
{
    A myA;    public A MyA
    {
        get{..}
        set{..}
     }
}B b = new B();
propertyGrid.SelectedObject = b;
PropertyGrid中只能出现:
MyA | 编辑框希望能将A属性展开:
MyA | 
    Name | 编辑框
    Age | 编辑框如何才能实现?
   
                     

解决方案 »

  1.   

    看看这篇文章吧,可以实现的!
    http://www.codeproject.com/KB/vb/using_propertygrid.aspx
      

  2.   


    class B
    {
        A myA;
        [TypeConverter(typeof(ExpandableObjectConverter))]
        public A MyA
        {
            get{..}
            set{..}
         }
    }
      

  3.   

    要使 PropertyGrid 能够展开属性,您需要创建 TypeConverter。TypeConverter 提供了从一种类型转换为另一种类型的方法。PropertyGrid 使用 TypeConverter 将对象类型转换为 String,并使用该 String 在网格中显示对象值
    [TypeConverter(typeof(ExpandableObjectConverter))] 
      

  4.   

    结合3,4楼的,我应该先创建一个AConverter,然后在B类中对A属性使用[TypeConverter(typeof(ExpandableObjectConverter))]。
    根据我查的资料,在定义A类时应该这样  
    [TypeConverterAttribute(typeof(AConverter))]
    public class A
    {}问题是这个AConverter要怎么写呢?
      

  5.   

    你不用创建什么转换器,将我那句直接拿过去用就可以了。
    ExpandableObjectConverter类库中本来就有。System.ComponentModel下
      

  6.   

    我用这个试过了 还是只显示MyA,不能展开...
      

  7.   


    B b = new B();
    b.MyA = new A();
    propertyGrid1.SelectedObject = b;
    propertyGrid1.ExpandAllGridItems();
      

  8.   

    加了  propertyGrid1.ExpandAllGridItems();这一句还是不行啊
    你试过可以??
      

  9.   

    请问如何控制如楼主所说的,MyA后面的值呢,一般情况下会显示的是MyA的类型即A,如何使显示为自己想显示的内容