![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| VID |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 4.10.2004 Где: Новосибирск Репутация: нет Всего: нет |
Привет всем!
Каким образом можно "связать" ComboBox с инстансом типа enum, чтоб отображать все возможные элементы перечисления и чтоб при выборе пользователем оного оно прописывалось в инстанс перечиления? Чтоб не создавать обратной связи между перечислением и ComboBox? |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Во-первых, набор элементов enum'а не изменяется в рантайме, так что делать binding на элементы не имеет смысла. И что означает "инстанс перечисления"? Объект типа enum с выбранным в combobox'е значением?
-------------------- ![]() |
|||
|
||||
| VID |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 4.10.2004 Где: Новосибирск Репутация: нет Всего: нет |
Смысл идеи такой.
Существует класс SettingsManager позволяющий визуализировать по некоторому алгоритму некий класс Settings, то есть визуализировать свойства класса Settings. В качестве параметра передается объект типа Settings (то есть инстанс класса Settings). Парсим Settings через рефлексию типов и узнаем что там имеется свойство типа enum, логично предположить что контролом для такого типа может быть ComboBox. Вот и хочется привязать ComboBox и объект типа enum (инстанс перечисления класса Settings). Чтоб не создавать функций для обработки изменения значения в ComboBox'e. Примерно такая идея |
|||
|
||||
| mr.DUDA |
|
||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
А чем PropertyGrid не подходит? Он для таких целей и создавался, имхо.
Можно забайндить св-во ComboBox.SelectedValue на объект перечисления, но тогда придётся задать DataSource для combobox'а и создать класс со свойствами, которые будут DisplayMember и ValueMember указанного DataSource. В примере внизу свойство MyEnumInstance байндится напрямую на значение TestEnum, выбранного в combobox'е:
-------------------- ![]() |
||||
|
|||||
| VID |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 4.10.2004 Где: Новосибирск Репутация: нет Всего: нет |
Спасибо это уже более приемлемо.
А PropertyGrid не подходит ввиду его плохого понимания обычными пользователями. ИМХО он логичен для программистов, но не user'ов ПО и состряпать с ним хороший SettingsManager не получиться. Еще раз огромное спасибо! |
|||
|
||||
| VID |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 4.10.2004 Где: Новосибирск Репутация: нет Всего: нет |
Немного инфы для будущих читателей...
Если заранее тип перечисления неизвестен, то есть будет известен только в рантайме, то шаблоны использовать нельзя, тогда можно переделать класс EnumElement так:
а вызов метода EnumElement.GetValue(Type t) осуществлять с использованием рефлексии типов, то есть:
|
||||
|
|||||
| lovermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 28.12.2004 Где: Прага Репутация: 1 Всего: 8 |
Если тип заранее не известне, то нельзя ли здесь использовать generics?
|
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Если не известен, юзаем EnumElement<object>.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |