9 / 9 / 2
Регистрация: 25.11.2012
Сообщений: 115
|
||||||
1 | ||||||
Задача на размышление (приведение типов или, может, другое решение)09.11.2013, 13:16. Показов 939. Ответов 14
Метки нет (Все метки)
Есть класс MasterPanel, одним из элементов которого является панель Panel. Элементы MasterPanel хранятся в словаре Dictionary<string, MasterPanel>.
Доступ к панели через MasterPanel.Panel. Панели содержат на себе различные контролы Control (от конкретного типа контрола код зависеть не должен). Прямого доступа к элементам на панели нет. Только доступ к самой панели. Требуется с этих нескольких панелей считать значения в элементах и записать их в одну коллекцию, xml-файл или что-то другое, что потом позволит восстановить значения. Я мало до чего додумался. Есть идея записать все значения из panel.Controls (для каждой панели) в коллекцию List<var>. Тут возникает несколько проблем: 1. Не во всех контролах значение записывается в свойство text. А value Или selectedItem из Control не достать, требуется приведение. 2. Если какой-либо контрол, например, Label взять из panel.Controls (без приведения он будет иметь тип Control), и поместить его самого в var, то какой тип получит эта переменная var, и что делать дальше. Помогите, пожалуйста с решением проблемы. Прилагаю описание класса MasterPanel: Кликните здесь для просмотра всего текста
0
|
09.11.2013, 13:16 | |
Ответы с готовыми решениями:
14
Нюанс с dynamic_cast: может ли указанное приведение типов быть корректным? конвертирование или приведение типов Неправильное приведение типов или как? Приведение типов. Char к String или на оборот? |
Неадекват
1492 / 1230 / 246
Регистрация: 02.04.2010
Сообщений: 2,789
|
|
09.11.2013, 14:15 | 2 |
Может быть стоит описать что вы хотите получить, а не просто реализацию непонятно чего?
1
|
9 / 9 / 2
Регистрация: 25.11.2012
Сообщений: 115
|
|
09.11.2013, 16:36 [ТС] | 3 |
Что-то вроде мастера (wizard) для получения некоторых настроек. ПО нажатию кнопки "Далее" мы берем из MasterPanel ключ, указывающий на следующую панель и отображаем ее вместо текущей.
Этот мастер выполняется в виде отдельной библиотеки. Панели описываются в программе. Поэтому надо, чтобы контролы добавлялись на панель в программе и код работы мастера не зависел от того, какие контролы будут размещены на панелях. Таким образом, в коде мастера есть коллекция-словарь для панелей. Чтобы получить требуемый конечный результат, мы последовательно создаем различные MasterPanel и добавляем их в эту коллекцию, указывая их ключи. Таким образом этот мастер можно использовать в различных ситуациях и различных программах, просто заменяя панели. У меня получилось описать все, кроме главного - получения введенных (указанных) значений из контролов на панелях.
0
|
9 / 9 / 2
Регистрация: 25.11.2012
Сообщений: 115
|
|
09.11.2013, 17:35 [ТС] | 5 |
Да мне просто бы совет, как можно значения брать. Я не ищу готового решения, мне хотя бы намек =)
Просто не могу найти приемлемого способа, чтобы сделать эту библиотеку с формой мастера универсальной. Мне в нескольких программах требуется, точнее, судя по проектам, потребуется мастер. И везде мастера разные, точнее, контролы в них. Хотелось бы знать, можно ли каким-то образом считывать значения из них единым способом?
0
|
Master of Orion
|
|
09.11.2013, 17:38 | 6 |
fadeinmad, я рефлексией проходил по всем открытым полям/свойствам, для каждого текстового поля генерировал текстбоксы, для числовых - numericUpDown, для булевских значений - CheckBox'ы, для полей из сложных классов - рекурсивно вызывать эту же функцию для создания панельки, на которой по схеме выше разместить нужные контролы.
1
|
9 / 9 / 2
Регистрация: 25.11.2012
Сообщений: 115
|
|
09.11.2013, 20:05 [ТС] | 7 |
У меня контролы уже будут, мне надо считать из них значения. То есть наоборот получить текстовые, числовые значения. Причем я не знаю, откуда я их беру, так как я знаю только тип Control.
В крайнем случае, можно запоминать сами контролы, хоть это и не очень хорошо, и может оказаться ресурсоемко очень. Но вот как тогда, "имея на руках" тип Control, узнать тип контрола и привести его к нему, чтобы получить значение. Да и тогда анализ контролов и получение значений окажется весьма сложной процедурой (много кода и ветвлений для анализа). Я ищу способ вывести все значения в единый тип, единую коллекцию или другой какой единый формат. А также способ их оттуда извлечь для использования в программе, а не создания контролов. З.Ы. Извините за такие описания невнятные. Сложно объяснить, чего требуется, так как сам не совсем до конца понимаю.
0
|
Master of Orion
|
||||||
09.11.2013, 20:08 | 8 | |||||
0
|
9 / 9 / 2
Регистрация: 25.11.2012
Сообщений: 115
|
|
09.11.2013, 20:09 [ТС] | 9 |
Тогда уж и через switch можно прописать.
Но это глуповато выходит((... Я думал в xml файл все выводить, но это, в принципе, тоже выход не ахти. =)
0
|
Master of Orion
|
||||||
09.11.2013, 20:16 | 10 | |||||
Пример:
1
|
9 / 9 / 2
Регистрация: 25.11.2012
Сообщений: 115
|
|
09.11.2013, 20:30 [ТС] | 11 |
Интересный способ, не знал про такой. Спасибо, большое. Буду пробовать =)
0
|
Master of Orion
|
||||||
09.11.2013, 20:50 | 12 | |||||
fadeinmad, можно короче (и не париться с ветками if else if...)
1
|
9 / 9 / 2
Регистрация: 25.11.2012
Сообщений: 115
|
|
09.11.2013, 21:00 [ТС] | 13 |
Неплохо)) Думаю, как раз что-то типо этого буду использовать =)
0
|
9 / 9 / 2
Регистрация: 25.11.2012
Сообщений: 115
|
|||||||||||
10.11.2013, 09:05 [ТС] | 14 | ||||||||||
Обнаружил небольшой недочет. Свойство Text есть у всех контролов и, естественно, оно будет выбираться всегда.
вместо
0
|
Master of Orion
|
|
10.11.2013, 11:10 | 15 |
fadeinmad, просто напиши text последним....
0
|
10.11.2013, 11:10 | |
10.11.2013, 11:10 | |
Помогаю со студенческими работами здесь
15
Что быстрее будет работать сравнение или (сложение и приведение типов)? Фреймы или может что-то другое Не требуется приведение типов при умножении типов Byte Решена задача(как я полагаю :D), но хочется другое решение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |