|
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
|
|
Сохранение настроек динамически добавленных контролов23.01.2019, 16:36. Показов 1533. Ответов 21
Метки нет (Все метки)
Всех приветствую!
Ребзя, нужен ваш совет. Суть такая. Есть основная форма. В эту форму, из dll, динамически подгружается юзерконтрол, в котором TabControl с вкладками и на каждой вкладке может быть всё что угодно (по сути, любой контрол, который есть в тулбоксе VS). При закрытии основной формы, нужно каким-то образом сохранить состояние и значения всех динамически подгруженных контролов. Если бы было заранее известно какие контролы будут в dll, то можно было бы создать класс с полями, далее сериализовать его и сохранить как бинарник. Или в тот же JSON всё сохранить, не суть. Поскольку о контролах ничего неизвестно, то и класс написать не могу. Топчусь сейчас на месте и не знаю что делать с этой бедой Если рассуждать логически, то нужно перебрать все контролы, получить их тип и каким-то образом основываясь на типе контрола, нужно подобрать соответствующий контейнер или что-то подобное, чтобы сохранить в него данные контрола. Для меня это темный лес, да и не знаю даже возможно ли такое провернуть. Взять например тот же DGV, вот что с ним делать, если он прилетит из dll? Причем, ладно сохранить, это ещё пол беды. А как потом всё это обратно проинициализировать в котролы? Как наиболее грамотно можно решить подобную задачу? Наверное код для решения подобной задачи будет монструозным в плане объема, поэтому готового решения не прошу. Мне бы просто понять вектор и в какую сторону копать. Буду очень благодарен за любую помощь.
0
|
|
| 23.01.2019, 16:36 | |
|
Ответы с готовыми решениями:
21
Отображение в дизайнере контролов, добавленных программно Прокрутка динамически добавленных элементов Изменение динамически добавленных Input |
|
Модератор
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,257
|
||||||
| 23.01.2019, 16:44 | ||||||
|
Дядя Корней, а какие свойства из каждого отдельного контрола будут использоваться вам известно заранее? можно сериализовать только конкретные свойства, есть пример, щас поищу, давал мне ovva
Добавлено через 3 минуты нашел, вот такая штука для сериализации КНОПКИ, может что-то с этим придумаете:
1
|
||||||
|
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
|
||||||||||||
| 24.01.2019, 12:22 [ТС] | ||||||||||||
|
А сохранить нужно состояние и значение контролов, т.е. координаты, размеры и что-то подобное не нужно сохранять. Т.е., если это чекбокс, то нужно сохранить его состояние - True/False. Если это текстбокс, то сохранить свойство - Text. Если NumericUpDown, то сохранить Value. ComboBox - Items. DGV - DataTable Or Rows, если DT отсутствует. ... и т.д. Добавлено через 18 минут На данный момент сделал метод расширение для контролов, чтобы рекурсивно можно было получить все контролы из указанного контрола и его контейнеров:
Можно поступить двумя способами: 1. В цикле пройтись по всем контролам, которые в pluginControls и проверить их на IsSerializable и разложить на два массива: a) контролы поддерживающие сериализацию. b) контролы не поддерживающие сериализацию. Далее, те, которые в массиве - a, их просто сериализовать в бинарник, те, которые в массиве - b, ??? с ними не знаю пока что делать. Нужно каким-то образом понять, какого типа Value у контрола и исходя из этого создать объект для хранения Value. Пока не знаю как это сделать более грамотно. 2. Можно не проверять на IsSerializable и не раскладывать контролы по разным массивам и вернуться к вопросу - Нужно каким-то образом понять, какого типа Value у контрола и исходя из этого создать объект для хранения.
0
|
||||||||||||
|
Модератор
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,257
|
|
| 24.01.2019, 12:25 | |
|
Дядя Корней, Хм, так вам ведь их потом нужно будет вернуть на место? доесть ДеСериализовать? Тут без координат никак ведь.?
0
|
|
|
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
|
|||||||
| 24.01.2019, 12:46 [ТС] | |||||||
|
Yury Komar, не, это по другому делается, не по координатам.
Из примера выше:
Я это планирую делать по имени объекта. Прохожусь по динамически подгруженным контролам, беру имя контрола и заливаю в него десериализованный объект с подходящим именем. Добавлено через 7 минут Сейчас меня только вот это держит:
0
|
|||||||
|
Модератор
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,257
|
|
| 24.01.2019, 13:04 | |
|
Дядя Корней, ну может быть в имя контрола включить какой-то маркер по которому можно определить его тип и действовать соответственно. или в свойство Tag это прописать и брать оттуда.
0
|
|
|
649 / 601 / 92
Регистрация: 19.03.2012
Сообщений: 1,128
|
|||
| 24.01.2019, 13:29 | |||
|
Если я Вас правильно понял, то
1
|
|||
|
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
|
|
| 24.01.2019, 14:06 [ТС] | |
|
Yury Komar, Nachrichter, ой ребят, не, боже упаси. Это же будет самый настоящий стыд, или быдло код, называйте как хотите ))
Фактически, мы должны будем опозориться и сказать другим разработчикам, чтобы при написании плагинов, они использовали какие-то там маркеры или метки в именах. Эх, ладно. Пойду в корпарат библиотеку изучать книги. Я уверен на 100%, что в NET есть инструменты для различной манипуляции с объектами, нужно только найти "ЭТО", что собственно, как всегда и займет 90% всего времени для решения задачи. Как всегда, 90% времени ищешь и 5 минут пишешь код. Я отпишусь ещё, если окончательно зайду в тупик или решу задачу.
0
|
|
|
Модератор
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,257
|
|
| 24.01.2019, 14:13 | |
|
Дядя Корней, Не совсем понял, имена контролам назначаются на стадии их разработки/написания чтоли? Это как?
Добавлено через 56 секунд Ведь вы в своем ПО динамически добавляете контролы? И имена им даете ВЫ. Или не так?
0
|
|
|
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
|
||
| 24.01.2019, 14:22 [ТС] | ||
|
Как я выше писал, ПО, это всего лишь оболочка(форма) с контейнером. В этот контейнер из dll динамически подгружаются контролы. Соответственно, ПО ничего не знает о контролах и именах контролов, которые она загрузила в свой контейнер. dll пишут сторонние разработчики, собственно, поэтому о контролах и их именах ничего неизвестно.
0
|
||
|
Модератор
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,257
|
|
| 24.01.2019, 14:33 | |
|
Дядя Корней, и правда нестандартная ситуация
![]() Ну как найдете решение - сообщите, тоже интересно
1
|
|
|
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
|
|
| 24.01.2019, 14:42 [ТС] | |
|
0
|
|
|
649 / 601 / 92
Регистрация: 19.03.2012
Сообщений: 1,128
|
||
| 24.01.2019, 14:58 | ||
0
|
||
|
1548 / 1521 / 325
Регистрация: 03.10.2012
Сообщений: 1,551
|
||||||
| 24.01.2019, 15:42 | ||||||
|
Дядя Корней, может это как-то поможет (через рефлексию)
2
|
||||||
|
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
|
||
| 24.01.2019, 15:47 [ТС] | ||
|
Сериализацию и сохранение я уже сделал, это оказалось не сложно. Осталось только обратную инициализацию контролов сделать. Над этим пока работаю.
0
|
||
|
1548 / 1521 / 325
Регистрация: 03.10.2012
Сообщений: 1,551
|
||||||
| 24.01.2019, 16:51 | ||||||
|
Дядя Корней, вот еще вариант, как получить свойства контрола
2
|
||||||
|
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
|
||
| 24.01.2019, 17:35 [ТС] | ||
|
MrCrown, с получением я уже решил вопрос.
Добавлено через 31 минуту Всё, сделал! ![]() Больше никаких XML, INI файлов, убогих Properties.Settings и прочих мучений. Всё настраивается, меньше, чем за минуту и так же просто используется. Сейчас я быстренько сваливаю домой, пока пробки не начались. Завтра утром выложу готовый класс.
0
|
||
|
Модератор
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,257
|
|
| 25.01.2019, 01:00 | |
|
Дядя Корней, отлично. Аж не терпится увидеть сие творение...
Больше понравилась фраза - Больше никаких XML, INI и т.п. ))
0
|
|
|
85 / 75 / 15
Регистрация: 18.01.2014
Сообщений: 359
|
|
| 25.01.2019, 05:32 | |
|
Может в саму дллку сохраняет...
0
|
|
|
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
|
|||
| 25.01.2019, 14:23 [ТС] | |||
|
У нас тут как всегда под конец месяца завал, пришлось переключиться на помощь, чтобы доделать кое-что в других проектах. Как освобожусь, создам отдельный тестовый проект. Добавлю в него для наглядности контролов, вынесу класс с сохранением из нашего рабочего решения в тестовый проект и залью сюда на форум. Просто в текущем виде класс слегка заточен под свои задачи и его нужно привести в стандарт, чтобы подходил под любые проекты. Рефлексия + стандартные NET классы для работы с объектами + сериализация + запись в бинарник = решение задачи.
0
|
|||
| 25.01.2019, 14:23 | |
|
Помогаю со студенческими работами здесь
20
Обработчик динамически добавленных кнопок Для динамически добавленных элементов не работает JS JS не работает для динамически добавленных элементов
Скрытие динамически добавленных через Ajax элементов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|