Внедрение подполей в PropertyGrid
Хорошо, поэтому моя терминология, когда дело доходит до С#, невелика, поэтому я попытаюсь объяснить это небольшим примером. Если вы создаете класс, который вы используете в PropertyGrid, и у вас есть следующие значения:
class Test
{
public Point example { get; set; }
}
Это создаст PropertyGrid, который имеет расширяемый объект "example", который имеет поля X и Y, чтобы создать "Точку".
Я пытаюсь создать объект "name" с полями "firstname" и "lastname", поэтому у меня есть:
class Test
{
public Name example { get; set; }
}
public struct Name
{
public string firstname { get; set; }
public string lastname { get; set; }
}
Это, однако, не работает должным образом.
Я думаю, мне нужно переопределить некоторые методы, чтобы получить эту работу, однако, поскольку у меня нет реальной терминологии для PropertyGrids, мне сложно найти решение.
Любая помощь будет большой.
Ответы
Ответ 1
После многого огляделся, наконец, смог понять, недостающее ключевое слово было "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 уверены, что запутываются.
Ответ 2
Я считаю, что в этом случае определения автоспециализированных свойств
public string Name { get; set; }
не работают для типов struct, но типов классов. В первом примере Point
- тип класса.
Try
class Name
{
public string FirstName {get;set;}
public string LastName {get;set;}
}
затем
class Test
{
public Name example {get; set;}
}
может работать.