Как разрешить дизайнеру C # редактировать мое свойство struct?

#c# #winforms #struct #properties #designer

#c# #winforms #структура #свойства #дизайнер

Вопрос:

Я создаю пользовательский элемент управления Windows Forms на C # с несколькими пользовательскими свойствами. Одним из таких свойств является простая структура с несколькими целыми полями:

 public struct Test
{
    public int A, B;
}

Test _Test;

[Category("MyCategory")]
public Test TestProperty
{
    get { return _Test; }
    set { _Test = value; }
}
  

Я хочу, чтобы дизайнер Visual Studio редактировал поля моей структуры так же, как это делается для Size , Margins и других подобных структур Windows Forms. Нужно ли мне внедрять пользовательский редактор свойств на основе UITypeEditor класса, или есть какой-то общий «редактор структуры», предоставляемый .Net framework?

Комментарии:

1. вместо того, чтобы обновлять заголовок до решаемого, вам следует добавить свой собственный ответ и, если он лучший, пометить его как принятый ответ. Это поможет другим, у кого возникнет такая же проблема в будущем, больше, чем просто редактировать ваш вопрос. Это также удалит его из списка «без ответов», куда многие из нас обращаются, чтобы найти людей, у которых есть вопросы, с которыми мы можем помочь.

2. Пробовал. Получил сообщение «новые пользователи должны подождать 8 часов, прежде чем отвечать на свои собственные вопросы».

3. @sharp вам не нужно отвечать на свой вопрос, но проверьте наиболее полезный ответ

4. @sharp — вам не нужно редактировать заголовок, чтобы сказать solved , просто подождите, пока не истечет 8 часов, затем добавьте его в качестве ответа, затем подождите любой период ожидания, прежде чем отмечать его как ответ.

5. @slugster, кажется, довольно сложно сделать такую простую вещь. Ждать и возвращаться к нему 2 раза — это определенно не то, что я хочу делать. Могу ли я просто вручную закрыть или удалить вопрос без всех этих осложнений?

Ответ №1:

Это должно сработать:

 [TypeConverter(typeof(ExpandableObjectConverter))]
public struct Test
{
    public int _A, _B;
    public int B
    {
        get { return _B; }
        set { _B = value; }
    }
    public int A
    {
        get { return _A; }
        set { _A = value; }
    }
}

Test _Test;

[Category("MyCategory")]
public Test TestProperty
{
    get { return _Test; }
    set { _Test = value; }
}
  

Комментарии:

1. Не работает, применение [Serializable] к объявлению структуры является обходным путем.

Ответ №2:

Вам нужно создать свой собственный конструктор. http://msdn.microsoft.com/en-us/magazine/cc164048.aspx