|
|
|
Создание программы - ООП модель, MVP30.10.2018, 11:10. Показов 70111. Ответов 99
Пример разработки приложения с нуля под WinForms
Рассматриваются такие аспекты разработки как:
В этом примере НЕ рассматриваются шаблоны типа фабрик, не рассматривается внедрение зависимостей (DI). Используется простой вариант шаблона Model-View-Presenter, адаптированный под специфику WinForms. Этот топик перекликается с этим FAQ, и является практическим примером к нему. Комментарии и вопросы - приветствуются. Постановка задачи Требуется создать приложение - опросник. Опросник будет состоять из нескольких вопросов с различными вариантами ответов. Вопросы могут быть двух видов - с выбором одного ответа из набора возможных, и открытые вопросы, в которых респондент может указать произвольный ответ в виде текста. В опроснике нужно предусмотреть возможность задавать некоторые вопросы и альтернативы только при выполнении некоторых условий, например если в предыдущем вопросе респондент выбрал определенный ответ. Приложение должно состоять из двух частей - конструктора опросника и приложения в котором респондент может ответить на вопросы готового опросника. Результаты опроса должны выгружаться в виде, пригодном для дальнейшей обработки.
18
|
|
| 30.10.2018, 11:10 | |
|
Ответы с готовыми решениями:
99
Встраивание Google RESTful pattern A в модель MVP Создание дочернего окна в MVP
|
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|
| 11.11.2018, 23:19 | |
|
Storm23, спасибо, получилось, хотя не понял, какое отношение эта строчка имеет к остальному коду...
Хоть что-то сам теперь попробую - вывести в лейблы заполненные ответы и вопросы к ним
0
|
|
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
||||||
| 16.11.2018, 18:30 | ||||||
|
Storm23, еще не подскажите по вот этой части :
Кликните здесь для просмотра всего текста
она записывает в нужные ячейки, но в новую строку. Нужно записать в строку, где первые столбцы (id, ФИО1, логин1, логин2, логин3) уже заполнены. А заполняются они вместе с нажатием Завершить у формы QuestInterview.
0
|
||||||
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
||||||||||||||||
| 16.11.2018, 19:14 | ||||||||||||||||
|
Storm23, у меня сложность (пока) с пониманием модели опросника.
я модифицировал конструктор формы QuestInterview так : Кликните здесь для просмотра всего текста
load_path - другая форма передает сразу нужный путь (так как их много, определяются в другой форме) save_path - аналогично num - 0 или 1, 1 для теста из конструктора (сразу закроет форму) и 0 для внесения данных. вызов метода экспорта в эксель тоже изменил Кликните здесь для просмотра всего текста
Все хорошо, можно спокойно передать готовые string, но вот не пойму как встроить мои данные в этот участок : Кликните здесь для просмотра всего текста
Добавлено через 1 минуту Решил использовать одну форму для запуска разных опросников/внесения результатов в разные эксели.
0
|
||||||||||||||||
| 16.11.2018, 19:29 | |
|
Не по теме: Наркоманов и личностей с синдромом заоблачного ЧСВ прошу отписаться от темы и прекратить тут постить ахинею, не нравится читать - вас никто не заставляет.
1
|
|
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
||||||||
| 16.11.2018, 19:46 | ||||||||
|
Добавлено через 3 минуты Кликните здесь для просмотра всего текста
Передавать нужно (вроде?) так как формочка одна для многих экселей
0
|
||||||||
|
|
|||||||
| 16.11.2018, 21:24 [ТС] | |||||||
|
Зачем вы ломаете класс ExportToDB? Он отличный. Его не нужно трогать. Нужно просто его правильно использовать:
Ну разве что вы можете добавить метод Update, если нужно. Но не нужно туда передавать всякую гадость типа string save_path.
1
|
|||||||
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
||||||
| 16.11.2018, 21:38 | ||||||
|
Storm23, спасибо, изменю. Не спорю, класс отличный, как и все остальные из ядра)
Пожалуйста, помогите тогда подредактировать метод
0
|
||||||
|
|
||||||||||||
| 16.11.2018, 23:11 [ТС] | ||||||||||||
1
|
||||||||||||
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|
| 16.11.2018, 23:46 | |
|
Storm23, огромное спасибо, очень выручили
![]() Добавлено через 30 минут
0
|
|
|
TheGreatCornholio
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
|
||
| 17.11.2018, 01:41 | ||
|
Еще совет: Вам нужно понять почему именно так (как в теме) реализован алгоритм - следует вчитываться в каждую фразу\строку по несколько раз. Таким образом, вы научитесь не просто копипастить код, а понять мысли (более опытного разработчика, разумеется). Я не убеждаю и не настаиваю, - просто попробуйте, это очень помогает в развитии.
1
|
||
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
||
| 17.11.2018, 02:12 | ||
|
Когда свой проект доделаю (сейчас бошка разрывается от объема), задам кучу теоретических вопросов (в моей оригинальной теме+тут много интересных понятий написали), потом тоже хочу в продолжение этого FAQ еще свой написать
0
|
||
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
| 18.11.2018, 15:09 | |
|
Здравствуйте всем. Посмотрел проект, скажу сразу - архитектура немного или непривычная либо запутанная. Для понимания связей приходится много раз скакать по контролам и думать что откуда приходит. Единственное, что мне понравилось, и что я возьму для себя - это класс Quest - он очень удобно сделан и им очень интересно пользоваться - тут и список сразу с вариантами и свойства сразу вопроса - признаюсь, не пользовался подобными конструкциями. Обработчик всех событий в одном месте - вещь взятая из MVP - тут говорить не о чем. Хотелось бы добавить вот что. Там, на каждом вопросе имеется "Если" - сама форма для записи Condition - мало что проясняет, да думаю - не очень ей удобно пользоваться. Я не успел сделать, уже когда свободное время ещё будет, но можно сделать выбор из уже имеющихся вопросов и в них из имеющихся вариантов - заготовку оставил, но уже позже немного - не могу представить всю модель, чтобы ничего не поломать и не изменить оригинальный подход автора, так как только сегодня погрузился в проект.
Непонятны следующие вещи - сортировка вопросов, сортировка вариантов - вообще зачем эти действия? Потом, условия для вариантов - вообще не понимаю, зачем тоже нужны. Исправил некоторые ошибки архитектуры и мелкие недочёты в бизнес обработке. Вот мой труд, что я сегодня поправил. Вообще, я ещё тогда почему-то решил, что автор не добавил зависимость вопроса от выбора варианта, на что автор вроде как предложил это мне сделать, хотя, я вижу, что он это реализовал через Calculator и Condition. Особо не вижу тут действий - только если сделать удобнее установку зависимостей. Но рефакторить ещё можно - там вообще всё сделано плоско и атомарно - т.е. идёт смешение логики ядра с визуализацией - я немного стал менять, но что-то дальше уже руки опустились - мне надо проект в голове уложить, чтобы я мог делать изменения в архитектуре, с общим подходом. Может, где не хватает комментов, тут уж извините, стараюсь писать код так, чтобы было понятно без них. Вообще, признаться, просто от скуки решил поковырять, вообще, если принимаете мои поправки, то думаю, что изменённый код на хабе даст мне знать, что я вообще не зря полез туда. Если не нужно, то тогда доделайте сами. В основном там рефакторинг остался. Да, и по поводу генерирования всех элементов в Build по изменившемуся состоянию - не хочу никого обидеть, но этот генератор очень начинает тормозить уже на 15м вопросе и 15ой альтернативе в вопросе. Также для себя взял идею отмены прорисовки - реально работает.
0
|
|
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
||
| 18.11.2018, 15:13 | ||
|
Не по теме:
0
|
||
|
|
|||||
| 18.11.2018, 16:31 [ТС] | |||||
|
Допустим есть два вопроса: 1) Вы пьете пиво? (да/нет) 2) Какие товары вы больше всего любите? (конфеты/пиво/яблоки) Понятно, что если респондент ответил в первом вопросе что он НЕ пьет пиво, то во втором вопросе нет смысла показывать альтернативу про пиво. Для этого используются фильтры альтернатив. Ну и кроме того, необходимость фильтрации альтернатив было в исходном ТЗ. umatkot, посмотрел ваш код. Какую задачу вы решаете? Вы убрали зачем-то метод Build из главной формы, и теперь опросники просто не открываются. Зачем? Вы добавили радиобаттоны и комбобоксы с непонятной функцией. Что они должны делать?
0
|
|||||
|
131 / 146 / 19
Регистрация: 19.02.2017
Сообщений: 619
|
|
| 18.11.2018, 16:45 | |
|
А правила не запрещают писать такие простыни? Это же не вопрос, а туториал.
0
|
|
|
TheGreatCornholio
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
|
||
| 18.11.2018, 23:21 | ||
|
Извиняюсь за беспорядок. Постараюсь больше не мешать. Этот пост не в счет, конечно же. Создание программы - ООП модель, MVP
0
|
||
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
||||||||||||||||||||||||||
| 19.11.2018, 00:45 | ||||||||||||||||||||||||||
|
Storm23,
Да, про радиобаттоны забыл. Я сначала хотел определять верный вариант, потом до меня дошло, что это же просто анкета. Да, надо убрать. А про Build - щас гляну. Добавлено через 8 минут Storm23, там ещё момент какой-то мутный в дизайнере - сам UserControl с вопросом начинает расширяться, если начинать добавлять альтернативу. Там, в дизайнере, якоря стоят то на правую сторону, то на левую - изменяешь размер QuestPanel и внутри контролы ползут друг на друга. Добавлено через 16 минут Про форму выражений - это замечательно, что она как умный калькулятор, но если уже туда добавлена портянка из ресурсов в виде микромануала, то я вот с первого взгляда не определил, что там и как составлять - надо ковырять код и смотреть тесты. Код в Build, который делал вот это(оставил с комментариями) Кликните здесь для просмотра всего текста
Я поменял на вот это: Подписка на события Кликните здесь для просмотра всего текста
Тело делегата тоже изменил Кликните здесь для просмотра всего текста
Так как у вас повторяются действия по двум моментам с FlowPanel я решился добавить общий обработчк на оба случая. Кликните здесь для просмотра всего текста
Мне эта реализация нравится намного больше вашей, поэтому я позволил себе такие выходки. Да и используется это намного удобнее, чем постоянная перерисовка элементов управления с нуля. Да и сложности в самом коде я не встретил при реализации - сам FlowLayoutPanel диктовал мне путь))) Я ещё хотел сделать вообще наследуемые UserControl от этого класса, чтобы иметь внутри формы свои методы обработки, но потом осёкся, так как нужно было делать статичную передачу FlowLayoutPanel в базовый класс, для этого бы мне в самом Designer проставить везде static у FlowLayoutPanel - что является бредом. Да и не унаследуешь сразу и форму и UserControl от UserControl....
0
|
||||||||||||||||||||||||||
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
| 19.11.2018, 00:47 | |
|
Убрал комбобоксы
0
|
|
| 19.11.2018, 00:47 | |
|
Помогаю со студенческими работами здесь
60
Модель ООП Закрепить модель ООП Модель работы светодиода ооп ООП модель системы спама Ооп модель телефонного справочника Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
||||
|
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
|