在PropertyGrid中实现子字段

tpl*_*ner 12 c# propertygrid visual-studio

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

class Test
{
    public Point example { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这将生成一个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; }
}
Run Code Online (Sandbox Code Playgroud)

然而,这并不按预期工作.

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

任何帮助都会很棒.

tpl*_*ner 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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

PropertyGrids肯定令人困惑.