Редактор WinForms: как отобразить дочерний объект как вложенный объект в Designer - PullRequest
0 голосов
/ 05 апреля 2020

Попытка отобразить элемент управления WinForms с дочерними объектами, чтобы отобразить дочерние объекты как редактируемые узлы в редакторе. Я думаю, что он должен работать аналогично тому, как редактор шрифтов работает в дизайнере окон / форм управления.

enter image description here

В двух словах сценарий это:

public MyEditorControl : UserControl 
{
     // get this property to display as an expandable object?
     public EditorConfiguration Configuration {get; set; }
}

Похоже, что TypeConverter и UITypeEditor вовлечены, но я не могу найти примеров того, как объект должен обрабатываться с использованием этих реализаций типов.

1 Ответ

1 голос
/ 05 апреля 2020

Вам необходимо, как вы упомянули, TypeConverter и переопределить следующие методы (подробности см. В прикрепленной ссылке):

// Override the two methods below when you need new instance per user edit
public override bool GetCreateInstanceSupported(ITypeDescriptorContext context)
{
    return true;
}

public override object CreateInstance(ITypeDescriptorContext context, 
    IDictionary propertyValues)
{
    return new EditorConfiguration
    {
        Value1 = (string) propertyValues["Value1"],
        Value2 = (string) propertyValues["Value2"]
    };
}

// You get the two methods below if inherit from ExpandableObjectConverter
// If you need extra logic such as property name ordering, you still need to
// override the correct methods to do so
public override bool GetPropertiesSupported(ITypeDescriptorContext context)
{
    return true;
}

public override PropertyDescriptorCollection GetProperties(
    ITypeDescriptorContext context, object value,
    Attribute[] attributes)
{
    return TypeDescriptor.GetProperties(typeof(EditorConfiguration), attributes);
}

И использовать преобразователь типов:

[TypeConverter(typeof(EditorConfigurationConverter))]
public class EditorConfiguration
{
    public string Value1 { get; set; }
    public string Value2 { get; set; }
}

Тогда в конструкторе вы можете увидеть: enter image description here

Если все свойства можно настроить через конструктор, вам может не потребоваться пользовательский UITypeEditor.

UITypeEditor требуется вам только тогда, когда вы хотите предоставить альтернативный / расширенный опыт для настройки конфигурации. Например, если вы хотите прочитать конфигурацию из файла, вы можете реализовать UITypeEditor, чтобы иметь возможность выбирать файл, используя диалоговое окно «Открыть файл» / селектор файлов.

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