![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| Andrew_D |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 25.7.2007 Репутация: нет Всего: нет |
Всем привет!
Столкнулся с проблемой создания собственного дизайнера для своего контрола Пробовал с примера на VB перейти на C#, камнем предкновения стала строка: CType(Me.Control, NewPanel).GradEditor() Как я понял, GradEditor() - это метод (или свойство) создаваемого компонента. Буду рад любой информации! Заранее спасибо! |
|||
|
||||
| mihryak |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 2 Всего: 36 |
вот так показываю форму с диалогом
а вот так выглядит само свойство
Это сообщение отредактировал(а) mihryak - 26.7.2007, 11:17 |
||||
|
|||||
| Andrew_D |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 25.7.2007 Репутация: нет Всего: нет |
Спасибо, сейчас попробую!
...попробовал. Если не сложно, расскажи, пожалуйста, по пунктам, как мне создать рабочий проект с твоим примером Это сообщение отредактировал(а) Andrew_D - 26.7.2007, 12:27 |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 1 Всего: 15 |
На C# это будет выглядеть так
-------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| Andrew_D |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 25.7.2007 Репутация: нет Всего: нет |
Спасибо! С этим разобрался...
Возникла друга проблема: Создал свой конторол MyButton: Button, добавил ему свойство "номер" (private int nomer), добавил метод для доступа к нему public int Nomer { get { return nomer; } set { nomer = value; } } В этом же классе добавил функцию, которая будет вызываться из дизайнера public void Number() { dialog_number form = new dialog_number();// мое диалоговое окно для ввода номера base.Invalidate();// не знаю, взял из примера на VB form.Text = this.Nomer.ToString(); this.Nomer = form.MyShow();// присвоение введеного номера, ф-ия MyShow возвращает введенное значение base.Invalidate();// не знаю, взял из примера на VB } В дизайнере прописал вызов: ((Button_D)this.Control).Number(); Суть проблемы: если добавить контрол на форму и сразу же присвоить номер, то номер присваивается (это смотрю в #region Windows Form Designer generated code). Но при следующих попытках изменить номер ничего не выходит!!! Может быть надо как-то обновлять #region Windows Form Designer generated code? |
|||
|
||||
| mihryak |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 2 Всего: 36 |
1. У тебя есть некий класс, одно из св-в которого ты хочешь дизайнить через PropertyGrid.
у меня это св-во
null возвращаю, чтобы ничего не писалось в гриде 2. Нужно создать форму-дизайнер для этого св-ва. Для передачи ей того, что собственно будет редактироваться, нужно завести у этой формы параметризированный конструктор. 3. Теперь создадим класс, отвечающий за вызов этой формы.
переопределённый метод EditValue() занимается тем, что вызывает форму-дизайнер. При этом параметр ITypeDescriptorContext context содержит в себе свойство Instance, содержащее собственно экземпляр редактируемого класса (не свойство!).
ещё один переопределённый метод GetEditStyle() задаёт тип дизайнера. в нашем случае - модальная форма.
4. Теперь нужно указать нашему свойству, что оно имеет свой собственный дизайнер, это делается атрубутом Editor, где первый параметр - тип написанного "вызывальщика" формы-дизайнера.
При выборе этого свойства в PropertyGrid'е будет доступна стандартная кнопочка с троеточием, открывающаяя нашу форму-дизайнер. |
||||||||||
|
|||||||||||
| Andrew_D |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 25.7.2007 Репутация: нет Всего: нет |
Вопрос по пункту 2.
Как создать форму-дизайнер для свойства? Т.е. в мой компонент добавить NewItem...Windows Form? |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 2 Всего: 36 |
ну да, в проект с контролом добавить WinForm
|
|||
|
||||
| Andrew_D |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 25.7.2007 Репутация: нет Всего: нет |
класс private class GroupsEditor : UITypeEditor добавлять в мой класс?
почему-то выдает много ошибок... И в reference вроде все подключил... |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 2 Всего: 36 |
у меня он определён в том же файле, что и сам класс с редактируемым свойством
в общем-то, это не правильно если будет в отдельном - то private, конечно, нужно заменить на internal или public (второе хуже) |
|||
|
||||
| AndrewD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
Извини меня, пожалуйста, что я так туплю (я еще начинающий!), у меня снова проблема!
Вставил твой код в тот же файл, где мой класс : internal class GroupsEditor : UITypeEditor { ......... } Происходит следующая ругань: D:\Андрей\Проекты\Свой интерфейс\forum\Class1.cs(41): The type or namespace name 'UserRights' could not be found (are you missing a using directive or an assembly reference?) D:\Андрей\Проекты\Свой интерфейс\forum\Class1.cs(42): The name 'rights' does not exist in the class or namespace 'forum.GroupsEditor' D:\Андрей\Проекты\Свой интерфейс\forum\Class1.cs(46): The type or namespace name 'rights' could not be found (are you missing a using directive or an assembly reference?) D:\Андрей\Проекты\Свой интерфейс\forum\Class1.cs(48): The type or namespace name 'GroupsForm' could not be found (are you missing a using directive or an assembly reference?) D:\Андрей\Проекты\Свой интерфейс\forum\Class1.cs(49): The type or namespace name 'groupEditor' could not be found (are you missing a using directive or an assembly reference?) Что такое UserRights и rights - вообще не понимаю!(такой уж я), а GroupsForm - это наверное public class GroupsForm: Form , т.е. форма-дизайнер ? И еще вопрос, параметры для конструктора ViewState.DisplayUsers, userId - что за переменные? Что надо добавить на форму-дизайнер? Может я что-то не подключил? У меня: using System; using System.ComponentModel; using System.Windows.Forms.Design; using System.Drawing.Design; а в reference: forum (- мой компонент) System System.Data System.Drawing System.Windows.Forms |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 2 Всего: 36 |
ой
UserRights - это мой класс, свойство Groups которого и подлежит отображению в дизайнере. Заменить на свой. GroupsForm - это класс формы-дизайнера. Заменить на свой rights и groupForm - просто локальные переменные, после правильно указанных классов всё встанет на свои места.
это параметры конструктора формы-дизайнера, у меня - GroupsForm. в большинстве случаев резонно будет передавать в этот конструктор context.Instance as MyClassWithDesignableProperty |
|||
|
||||
| AndrewD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
Спасибо, попробую. Если что, то напишу
|
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 2 Всего: 36 |
||||
|
||||
| AndrewD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
Спасибо большое mihryak !!! Вроде разобрался, но все равно присутствуют косяки
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |