| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Помогите добавить дизайнер к компоненту |
| Автор: Serjeo 30.7.2007, 13:24 |
| Есть некоторый собственный компонент: public partial class SimpleComponent : Component { ... } и есть произвольная форма куда я из toolbox-а перекидываю значок собственного компонента. Что нужно указать в атрибутах, чтобы при выделении этого значка на форме я мог редактировать все свойства собственного компонента в окне Properties? Что вообще нужно написать? |
| Автор: mihryak 30.7.2007, 13:52 |
| да ничего особого можно не указывать, просто объявить свойства публичными - у меня вполне так работает а по собственно дизайнерам я http://forum.vingrad.ru/forum/topic-165103.html написал примерчик.. |
| Автор: Serjeo 30.7.2007, 14:16 | ||
Возможно я не могу понять простого. Если не трудно, объясните. Есть собственный компонент в *.dll исполнении. Внутри есть два свойства с простым типом и один с вложенным собственнымю. Я перетаскиваю этот компонент из toolbox-а на вновь созданную форму. В окне Properties первые два свойства могу изменять, а вложенное нет. В чем причина. Как мне установить дизайнер для этого свойства?. Вот код компонента:
|
| Автор: mihryak 30.7.2007, 14:36 | ||||
в примерчике это есть ;) |
| Автор: mihryak 30.7.2007, 15:48 |
| а ребилд не помогает? ПС. это странно, но у меня теперь и исходный вариант нормально редактируется |
| Автор: Serjeo 30.7.2007, 16:21 | ||
Все работает. Спасибо огромное! |
| Автор: Serjeo 31.7.2007, 10:08 |
| А как сделать так, чтобы можно было редактировать свойства своего компонента не через окно Properties, а используя свою новую форму? Заранее спасибо! |
| Автор: mihryak 31.7.2007, 10:11 |
| Serjeo, вот только честно, ты http://forum.vingrad.ru/forum/topic-165103.html скачал? там есть редактирование и через PropertyGrid, и через свою форму. |
| Автор: Serjeo 31.7.2007, 11:07 |
| Я имел ввиду редактирование свойств в Design-time. Там разве для этого? |
| Автор: mihryak 31.7.2007, 11:14 |
| Может, я как-то не так понял, но в Design-time, если не раскрывать свойство Properties моего контрола, а просто кликнуть, то откроется форма для редактирования. В Run-time то же самое произойдёт, если на форме в компоненте PropertiesGrid выбрать это же свойство. Ну а в общем, нужно написать наследника для UITypeEditor и аттрибутом [Editor(typeof(MyPropertiesEditor), typeof(UITypeEditor))] задать его свойству. ------- а, понял, похоже. PropertiesGrid - это не только контрол на моей форме в примере, но и редактор свойств в самой студии |
| Автор: Serjeo 1.8.2007, 08:22 |
| Все, я разобрался. В Properties моего компонента появляется строка Property1, напротив которой кнопочка с тремя точками. При нажатии на нее появляется моя форма для редактирования этого компонента и все это в Design-time. А вот теперь не могу разобраться почему все то, что я изменил не сохраняется после повторного закрытия открытия этой формы. Здесь нужно что-то сериализировать? |
| Автор: mihryak 1.8.2007, 09:27 |
| Serjeo, без кода сложно сказать Есть подозрение, что неправильно написал метод EditValue. Если в форме были выставлены новые значения и свойство имеет сложный тип (собственный класс), то нужно сформировать новый экземпляр этого класса и возвратить его в этом методе. Если не сделать этого, возвращая тот же экземпляр, но с изменёнными внутренними свойствами, то студия сравнит сами экземпляры, увидит, что это один и тот же, и не предпримет никаких действий. Второе подозрение - при создании формы её собственные контролы не конфигурятся текущим значением редактируемого свойства. |
| Автор: Serjeo 1.8.2007, 09:33 | ||||||
Вот код:
а это участок кода компонента:
Может нужна сериализация в дизайнере формы, куда я перетаскиваю компонент:
|