.NET Custom UserControl со структурированными / многоуровневыми свойствами - PullRequest
1 голос
/ 13 августа 2011

Я могу создать пользовательский элемент управления UserControl с простыми свойствами (Integer, String и т. Д.), И эти свойства отображаются на панели свойств. Я также могу создать пользовательский элемент управления UserControl со свойствами, такими как размер, прямоугольник и т. Д., И эти свойства будут отображаться как расширяемый элемент на панели свойств (нажмите «+», и размер увеличится до «Ширина и высота»).

Можно ли создать свойства с моей собственной структурой? например Свойство «Сообщение» расширяется до «Текст», «ForeColor», «BackColor», «Blink» и т. Д. Я попытался создать свойство, которое ссылается на простой класс или структуру, содержащее свойства, представляющие мою пользовательскую структуру, но на панели свойств свойство отображается серым цветом и не может быть расширено. или модифицированный.

1 Ответ

1 голос
/ 13 августа 2011

Вам нужно предоставить TypeConverter для вашего пользовательского типа, чтобы его можно было преобразовать в строку и из строки, а затем украсить ваш пользовательский тип с помощью TypeConverterAttribute.

Получите ваш TypeConverter от ExpandableObjectConverter.

public class MyTypeConverter : ExpandableObjectConverter
{
}

Переопределить CanConvertTo(), ConvertTo(), CanConvertFrom() и ConvertFrom(), чтобы обеспечить возможность преобразования пользовательского типа в строку (это значение, которое отображается в сетке свойств в главной строке, которую вы можете см, прежде чем расширяться) и от строки обратно к себе. Распространенным строковым представлением будет показ списка всех значений поля, разделенных запятыми.

Украсьте пользовательский тип с помощью TypeConverterAttribute.

[TypeConverter(typeof(MyTypeConverter ))]
public struct MyType
{
}

Это самый необходимый минимум для начала. Существует гораздо больше, чтобы учиться. Эта статья MDSN может быть хорошим началом.

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