代码之家  ›  专栏  ›  技术社区  ›  tplaner

在PropertyGrid中实现子字段

  •  12
  • tplaner  · 技术社区  · 16 年前

    好吧,我的术语在C方面不是很好,所以我将尝试用一个小例子来解释。如果在PropertyGrid中创建要使用的类,并且具有以下值:

    class Test
    {
        public Point example { get; set; }
    }
    

    这将生成一个PropertyGrid,它有一个可展开的对象“example”,其中包含字段X和Y,以便创建一个“点”。

    class Test
    {
        public Name example { get; set; }
    }
    
    public struct Name
    {
        public string firstname { get; set; }
        public string lastname { get; set; }
    }
    

    但是,这并没有按预期工作。

    我想我需要重写一些方法来让它工作,但是因为我没有真正的术语来描述PropertyGrids,所以我很难找到一个解决方案。

    任何帮助都会很好。

    2 回复  |  直到 16 年前
        1
  •  15
  •   tplaner    16 年前

    环顾四周,我终于弄明白了,缺少的关键字是“ExpandableObjectConverter”

    public Form1()
    {
        InitializeComponent();
    
        Person x = new Person();
        propertyGrid1.SelectedObject = x;
    }
    
    public class Person
    {
        public string Caption { get; set; }
    
        [TypeConverter(typeof(ExpandableObjectConverter))]
        public class Name
        {
            public string FirstName { get; set; }
            public string LastName { get; set; }
    
            public override string ToString()
            {
                return LastName + ", " + FirstName;
            }
        }
    
        private Name _name = new Name();
    
        public Name testName
        {
            get { return _name; }
        }
    }
    

    房地产泡沫确实令人困惑。

        2
  •  1
  •   ChrisBD    16 年前

    我相信在这种情况下,自动实现属性定义

       public string Name { get; set; }
    

    Point 是类类型。

    class Name
    {
      public string FirstName {get;set;}
      public string LastName {get;set;}
    }
    

    然后

    class Test
    {
      public Name example {get; set;}
    }
    

    可能有用。