|
|
|
Создание программы - ООП модель, MVP30.10.2018, 11:10. Показов 72725. Ответов 100
Пример разработки приложения с нуля под WinForms
Рассматриваются такие аспекты разработки как:
В этом примере НЕ рассматриваются шаблоны типа фабрик, не рассматривается внедрение зависимостей (DI). Используется простой вариант шаблона Model-View-Presenter, адаптированный под специфику WinForms. Этот топик перекликается с этим FAQ, и является практическим примером к нему. Комментарии и вопросы - приветствуются. Постановка задачи Требуется создать приложение - опросник. Опросник будет состоять из нескольких вопросов с различными вариантами ответов. Вопросы могут быть двух видов - с выбором одного ответа из набора возможных, и открытые вопросы, в которых респондент может указать произвольный ответ в виде текста. В опроснике нужно предусмотреть возможность задавать некоторые вопросы и альтернативы только при выполнении некоторых условий, например если в предыдущем вопросе респондент выбрал определенный ответ. Приложение должно состоять из двух частей - конструктора опросника и приложения в котором респондент может ответить на вопросы готового опросника. Результаты опроса должны выгружаться в виде, пригодном для дальнейшей обработки.
19
|
|
| 30.10.2018, 11:10 | |
|
Ответы с готовыми решениями:
100
Встраивание 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
Модель ООП Закрепить модель ООП Модель работы светодиода ооп ООП модель системы спама Ооп модель телефонного справочника Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|