Реализация подполей в PropertyGrid - PullRequest
12 голосов
/ 24 мая 2010

Хорошо, моя терминология, когда речь заходит о 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 ]

15 голосов
/ 24 мая 2010

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

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

   public string Name { get; set; }

работает не для структурных типов, а для классов. В первом примере Point является типом класса.

Попробуйте

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

1010 * тогда *

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

может работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...