|
2 / 2 / 3
Регистрация: 13.10.2012
Сообщений: 130
|
|
Создание формы настроек приложения с деревом категорий01.03.2016, 07:30. Показов 13543. Ответов 33
Метки нет (Все метки)
Всем привет!
Нужно сделать форму на подобие этой и тут возникла пара вопросов что за элемент с левой стороны? похоже на treeView, или это он и есть только вид другой и второе, при выборе позиции в левой части что то должно появиться в правой, понятно что можно туда добавить динамически созданные контролы, а можно ли как то использовать нарисованные? Спасибо!
0
|
|
| 01.03.2016, 07:30 | |
|
Ответы с готовыми решениями:
33
Создание настроек для приложения Таблица с деревом категорий, запросы БД
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
|
|||
| 01.03.2016, 07:54 | |||
|
1
|
|||
|
2 / 2 / 3
Регистрация: 13.10.2012
Сообщений: 130
|
||
| 01.03.2016, 07:59 [ТС] | ||
|
0
|
||
|
325 / 136 / 28
Регистрация: 18.09.2014
Сообщений: 167
|
|
| 01.03.2016, 08:00 | |
|
А Вы сделайте TabControl с невидимыми Tab-ами
0
|
|
|
325 / 136 / 28
Регистрация: 18.09.2014
Сообщений: 167
|
|
| 01.03.2016, 08:15 | |
|
2
|
|
|
|
|
| 01.03.2016, 08:26 | |
|
Defazze, обыкновенное говнокодерское решение. Потому что при большом количестве контролов форма создаётся неадекватно долго. Потому что нельзя просто добавить новые контролы. Потому что свалка кода в дизайнере и куча пересекающихся областей видимости, которые друг к другу никакого отношения не имеют.
Добавлено через 1 минуту Тяп-ляп продакшн, как я называю... Добавлено через 2 минуты Потом отсюда растёт извечный вопрос: "Аааааа, как убрать кнопки у TabPage!?" и костыли, убирающие эти кнопки.
0
|
|
|
325 / 136 / 28
Регистрация: 18.09.2014
Сообщений: 167
|
|
| 01.03.2016, 08:27 | |
|
Rius, значит, не говнокодерское решение, а удобное решение, подходящее для формы с небольшим количеством контролов.
0
|
|
|
|
|
| 01.03.2016, 08:32 | |
|
Единственное оправдание такого - прототип или предупреждение оверинженеринга. Если так оставить в развивающейся программе, оно перерастает в обычный говнокод со всеми вытекающими и пахнущими последствиями.
0
|
|
|
2 / 2 / 3
Регистрация: 13.10.2012
Сообщений: 130
|
|
| 01.03.2016, 08:34 [ТС] | |
|
да динамическое создание элементов это правильно, напрягает только позиционирование...
0
|
|
|
|
|
| 01.03.2016, 08:36 | |
|
Slavok47, Вы не поняли.
Можно создать UserControl в дизайнере, как новый класс. В студии есть создание нового контрола. На него накидать все что нужно. И вот этот готовый наследник UserControl'а и создавать динамически. Добавлено через 44 секунды Для позиционирования его уже можно применять соответствующие контейнеры.
1
|
|
|
2 / 2 / 3
Регистрация: 13.10.2012
Сообщений: 130
|
|
| 01.03.2016, 08:39 [ТС] | |
|
Rius, хм, да действительно не понял, буду разбираться
0
|
|
|
|
|
| 01.03.2016, 08:59 | |
|
Defazze, При разработке GUI нужно придерживаться тех же правил, что и для любых других ООП обьектов, вы согласны? А раз так, то как же можно пихать на форму кучу совершенно разнородных обьектов, никак не связанных между собой? Это же нарушает и принцип инкапсуляции, и solid, и фактически является антипаттерном, god обьектом.
0
|
|
|
325 / 136 / 28
Регистрация: 18.09.2014
Сообщений: 167
|
|
| 01.03.2016, 09:18 | |
|
Storm23, С правилами ООП трудно не согласится ) Но почему мы решили, что форма предназначена для отображения разнородных объектов? Стандартная задача: есть некоторые UserSettings, разбитые по категориям. Представляют из себя по сути один плоский класс с набором свойств. Вот их мы и отображаем. Деление на категории - исключительно пользовательское удобство.
Я ж не говорю, что табы категорически лучше или хуже юзер-контролов. Для каждого подхода есть своя область применения.
0
|
|
|
|
||
| 01.03.2016, 09:41 | ||
Сообщение было отмечено Rius как решение
РешениеDefazze, Slavok47, Смотрите как это должно быть: На главной форме лежит один UserControl, содержащий в себе дерево - слева. И пустая панель - справа. Панель - ничего не содержит и является просто контейнером для панелей настроек. Далее, код главной формы вообще ничего не содержит, кроме одного обработчика. Это обработчик события SelectedNodeChanged дерева. В это обработчике, форма очищает панель справа, и создает UserControl того типа, который передало ему дерево. Создав контрол, отображает его в панели справа. Все. Таким образом, наша главная форма вообще никак не будет меняться, какие бы новые панели свойств мы не делали, как бы не менялось дерево или как бы не менялись панели свойств - UserControl-ы. Код нашей формы - не будет меняться. Мы его один раз сделали - и забыли о нем. Красиво? Далее мы просто разрабатываем свои простые UserContol-ы для каждой категории настроек, которые будут инкапсулировать в себе логику и интерфейс каждой категории.
3
|
||
|
325 / 136 / 28
Регистрация: 18.09.2014
Сообщений: 167
|
|
| 01.03.2016, 09:52 | |
|
0
|
|
|
2 / 2 / 3
Регистрация: 13.10.2012
Сообщений: 130
|
|
| 01.03.2016, 10:10 [ТС] | |
|
Я понял принцип, спасибо!
0
|
|
|
|
||||||||||||
| 17.09.2016, 14:42 | ||||||||||||
|
1) Возможно придется создавать целую папку UserControlов для каждой такой формы 2) Композиция главной формы во времени разработки ухудшается: мы не видим как UserControl выглядит внутри нашей формы до выполнения программы 3) Нет возможности переключения между панелями во времени разработки 4) Код формы наполняется кодом, который больше относится к сериализации/десериализации контролов. Это отвлекает от логики. Ведь есть специально обученные сериализаторы, пусть они занимаются свойствами контролов в специально отведенном для этого месте 5) Создание насыщенных панелей скажется на производительности 6) При переключении между панелями будут сбиваться такие свойства, как позиция скролла, выбранная ячейка в таблице и т.д. Пользователю придется заново это делать Вобщем, получается сложная декомпозиция контролов (форма в одном месте, панели в другом) без возможности рациональной композиции во времени разработки. Плюс мы не используем уже готовые решения сериализации времени разработки, мы пишем их сами. Как-то так ![]() Я использую такой контрол для этих случаев. Он тоже не идеален, но вышеперечисленных проблем с ним нет ![]() Логика переключения между панелями при этом сводится к одной строчке:
1
|
||||||||||||
|
|
|
| 17.09.2016, 16:18 | |
|
Вот, кстати, обыкновенное говнокодерское решение.rar.
Только не вижу тут ни в дизайнере (точнее в файле Form1.Designer.cs) свалки ни кучи пересекающихся областей видимости. Все как в обычном TabControl. Или он тоже нарушает все принципы ООП и оправдание ему прототип или предупреждение оверинжиниринга??? А если нужно логику декомпозировать - никто не мешает те же UserControlы насоздавать и поместить их на вкладки. Не понимаю, неужели ни у кого не было никогда задачи переключаться между двумя-тремя панелями без использования закладок. Например, между панелью для физических и юридических лиц в зависимости от статуса выбранного клиента. Вы для этого каждый раз создавали заново всю панель или еще "проще" решения придумывали, запутывая логику и пользователя только потому, что TabControl - это зло? Почему такая боязнь TabControlа? Просто для одних задач нужно действительно создавать заново UserControlы, для других этого делать не надо. У каждого способа свои плюсы, свои минусы - нельзя всех под одну гребенку стричь
2
|
|
| 17.09.2016, 16:18 | |
|
Помогаю со студенческими работами здесь
20
Создание формы из консольного приложения
Пример приложения на C# с деревом и таблицей Создание формы перед главной формой приложения Создание одностраничного приложения. Обязательные формы - регистрация, авторизация, главная страница Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|