#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