Реализация sub поля в PropertyGrid

Хорошо, таким образом, моя терминология когда дело доходит до C# не является большой, таким образом, я попытаюсь объяснить это с небольшим примером. При создании класса, который Вы используете в PropertyGrid, и у Вас есть следующие значения:

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

Это произведет PropertyGrid, который имеет расширяемый объект "пример", который имеет поля X and Y для создания "Точки".

Я пытаюсь создать объектное "имя", которое имеет поля "firstname" и "lastname", таким образом, я имею:

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

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

Это однако не работает, как предназначено.

Я думаю, что должен переопределить некоторый метод (методы) для получения этой работы, однако так как у меня действительно нет терминологии вниз для PropertyGrids, для меня трудно найти решение.

Любая справка была бы большой.

12
задан MvanGeest 6 June 2010 в 19:17
поделиться

2 ответа

После долгих поисков я наконец-то смог разобраться, недостающим ключевым словом было "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 точно сбивают с толку.

15
ответ дан 2 December 2019 в 20:16
поделиться

Я считаю, что в данном случае автоимплиментированные определения свойств

   public string Name { get; set; }

работают не для типов struct, а для типов class. В первом примере Point является типом класса.

Try

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

then

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

may work.

1
ответ дан 2 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: