在PropertyGrid中实现子字段

时间:2010-05-24 15:13:53

标签: c# visual-studio propertygrid

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

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

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

我正在尝试创建一个对象“name”,其中包含“firstname”和“lastname”字段,所以我有:

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

public struct Name
{
    public string firstname { get; set; }
    public string lastname { get; set; }
}

然而,这并没有按预期运作。

我认为我需要覆盖一些方法才能使其正常工作,但是由于我没有真正使用PropertyGrids的术语,因此我很难找到解决方案。

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:15)

经过大量的回顾,我终于能够弄明白,丢失的关键字是“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; }
    }
}

PropertyGrids肯定令人困惑。

答案 1 :(得分:1)

我相信在这个例子中自动诠释了属性定义

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

可能会有效。