|
|
|
Создание программы - ООП модель, MVP30.10.2018, 11:10. Показов 74398. Ответов 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
|
|
| 20.11.2018, 01:50 | |
|
Storm23,
Позвольте задать последние 2 вопроса по ядру : 1. Можно на этапе прохождения опросника вернуться на шаг назад? То есть выбрал/ввел ответ на вопрос 2 - вышел вопрос 3 - нажал Назад - вопрос 3 пропадает и опять задается 2й вопрос. 2. Как можно реализовать возможность установки зависимости для AlternativePanel/QuestPanel от значения текста в textBox на форме конструктора? В чем суть дополнения к ТЗ - в оригинальном экселе (откуда черпается вся инфа о пользователях) есть столбец с датой трудоустройства в формате дд.мм.гггг. Так вот, для сотрудников опросник будет считываться из одного файла. Тот же вопрос про режим (5/2, 2/2..) зависит от стажа и вариант с 2/2 не должен показываться новичкам. textBox нужен на каждом QuestPanel/AlternativePanel. В него админ вписывает число (кол-во месяцев). Если после установки кол-ва полных месяцев работы сотрдудника < чем в textBox - вопрос не задается. Если ничего не указать в textBox-е - ничего не прятать от новичков. Давно выяснил, что если три вопроса A1, A2, A3 и два последних из них зависят от выбора в A1 - при записи в эксель, даже при наличии столбцов A1...A3 - выдаст ошибку. Не критично, поэтому, хотя бы textBox на каждой AlternativePanel. Только в таком случае придется и числа сохранять в .q. При считывании опросника уже сравнивать с реальным стажем. Впринципе это можно конструктору Интервью передать. Много вопросов уже задал, понимаю, но еще до углубленного изучения ядра не дошел. Спасибо заранее.
0
|
|
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|||
| 20.11.2018, 06:19 | |||
|
Например, начинается опрос и сразу же форма выбора респондента, например. Добавлено через 2 минуты
0
|
|||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 20.11.2018, 06:22 | ||
|
0
|
||
|
|
||||
| 20.11.2018, 10:47 [ТС] | ||||
|
Для этого в классе InterviewManipulator создаете метод GoToPrevQuestion, по аналогии с GoToNextQuestion. В этом методе нужно: 1) удалить последний Answer из Anketa 2) удалить тот же Answer из Interview.PassedAnswers 3) последний установить Answer как currentAnswer в Interview Если у вас есть некая информация, которую вы берете из внешнего источника, и от этой информации зависит прохождение интервью, то нужно: 1) Создать в анкете фейковый вопрос. Например с именем F1. 2) В вопросе F1 установить условие, которое никогда не будет выполняться. Например 1=2. Тогда вопрос F1 никогда не будет показываться респонденту. 3) Перед началом интервью, занести в Anketa данные для вопроса F1 (создав Answer для F1) из вашего внешнего источника. 4) Далее, в остальных вопросах опросника, вы сможете ссылаться на F1 в ваших условиях, и таким образом показывать/скрывать вопросы и альтернативы, в зависимости от F1.
0
|
||||
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
| 20.11.2018, 12:27 | |
|
Fulcrum_013, прошу прощения, что намерен оспорить Ваше мнение - это наоборот вообще-то. ТЗ - ниболее полное описание спецификации практически со всеми деталями. Постановка же задачи - это более общая и глобальная цель, которую можно разбить на подзадачи и, в итоге, составить ТЗ.
В самом талмудном ТЗ есть такая глава даже - постановка задачи - более общее представление.
0
|
|
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|
| 20.11.2018, 16:59 | |
|
0
|
|
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
| 21.11.2018, 01:15 | |
|
Fulcrum_013, там непроверенная и не достоверная информация.
Добавлено через 7 минут здесь читайте, что откуда выходит - https://studfiles.net/preview/2038443/, вообще ТЗ может содержать более точную спецификацию по входным и выходным параметрам системы и её компонентов, чего нет в постановке - возможно, в постановке идёт более полное описание архитектуры и бизнес процессов, но не наоборот. С одним ТЗ я могу полностью описать всю структуру данных - а постановка - это вообще обычно всегда было введением перед определением бизнес процессов и проработки архитектуры с моделями https://lektsii.org/7-60695.html. Постановка как бы определяет что мы хотим получить. В википедию кто-то откуда-то скопипастил бездумно, тот кто не делал ничего подобного. Добавлено через 5 минут Более близкий к теме дам пример - постановкой задачи мы могли бы назвать описание "хотелки" заказчика. Он говорит - я хочу опросник, чтобы он мог создавать опросы и проводить анкетирование. Каждый вопрос может быть зависим от ответа предыдущего вопроса. Анкеты должны сохраняться в БД, ФАЙЛЫ, читаться также. И ещё некоторые детали глазами заказчика, но уже более продуманные. А ТЗ бы описывало нам, какие формы что содержат, какие поля, какие форматы в файлах и БД, колонки и типы данных. Потом прорабатывается архитектура и бизнес процессы. Примерно так. Добавлено через 1 минуту ТЗ может идти и после проработки архитектуры - это уже по ситуации смотришь. Программист берёт ТЗ и клепает тупо код не думая. По постановке идёт работа как по основному заданию. Добавлено через 1 минуту Вообще, я работал в отделе постановке программного обеспечения - мы там вообще всё делали, но в основном клепали ТЗшки. После института пришёл и несколько удивился, что они весь этот процесс называют постановкой а не разработкой. В итоге мы занимались переводом хотелок специалистов в более полную документацию в виде ТЗ. Бизнес модели уже дорабатывали программисты. Добавлено через 56 секунд Но это не совсем корректное было определение, всё-таки мы там больше пили чай и ели торты. Добавлено через 4 минуты Возможно, я подзабыл, да, постановка может иметь более насыщенную работу, но обычно это дело или обозначается как видение или уже является всем процессом разработки. Короче, постановки тоже бывают разные - всё зависит от смысла, который в него, в этот термин вкладывают. Добавлено через 1 минуту Я скинул два источника, чтобы можно было увидеть, что в одном месте это этап разработки, а в другом - это весь процесс.
0
|
|
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|||||||
| 21.11.2018, 01:38 | |||||||
|
Кликните здесь для просмотра всего текста
Под 1м пунктом подразумевалось currentQuestIndex - 1;? В результате лишь на месте активного вопроса появляется предыдущий (при нажатии на кнопку Назад разумеется). Удалить (визуально ответ) невозможно, да?
0
|
|||||||
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
||
| 21.11.2018, 01:47 | ||
|
Добавлено через 5 минут вчера весь вечер потратил на то, что у меня форма вопроса в дизайнере схлопывается в узкую полоску - а понять почему- не могу. Или студия глючит или я в лыжах на асфальте. Устанавливаю окно - запускаю, а там полоски вместо вопросов. Устанавливаю обратно размер, закрываю студию - открываю - снова полоски. капец. так из-за дизайна, бывает время теряешь впустую.
0
|
||
|
|
|||||||
| 21.11.2018, 02:34 [ТС] | |||||||
|
Вот как должен выглядеть этот метод:
1
|
|||||||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 21.11.2018, 04:02 | ||
|
1
|
||
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|||
| 21.11.2018, 21:04 | |||
|
Ну я как обычный человек подумал, что если одно увеличивает -надо подправить немного и будет в обратную сторону. К тому же : Ядрышко-то огонь, позже разобрать и open-source dll-ку запилить можно. Спасибо) Интересный момент - когда удаляешь альтернативу, она остается визуально неактивной, словно картинка, когда новую добавляешь - пропадает и появляется активная новая. От чего так?
0
|
|||
|
|
|||||||
| 21.11.2018, 22:09 [ТС] | |||||||
|
В метод UpdateInterface добавьте pnMain.Invalidate():
0
|
|||||||
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|
| 29.12.2018, 14:33 | |
|
Storm23, давно не отвечал, ждал испытаний своего проекта.
Всего 3 выявились ошибки в проекте : -как сделать неактивной/спрятать кнопку Назад при прохождение 1го вопроса в опроснике? Если нажать назад - на 1м вопросе - выходит ошибка -если вернуться назад и выбрать другой ответ из выпадающего списка - не подгружаются варианты в следующем вопросе, даже если опять вернуться и выбрать ранее выбранный ответ - все, следующие вопросы не подгружаются -если ответ с ручным вводом и пользователь при прохождении опросника не ввел туда текст - тоже ошибка. Можно как-нибудь хотя ввести проверку на пустое поле? Добавлено через 14 секунд С наступающим всех, форумчане)
0
|
|
|
|
||
| 29.12.2018, 20:15 [ТС] | ||
|
MIRAMIX,
у вас есть полный исходный код, у вас есть полное объяснение каждого метода, у вас проект хорошо структурирован. Что мешает вам самому исправить ошибки? Возникают проблемы - пробуйте их решить самостоятельно. interview.PassedAnswers. Если он пуст - то понятное дело, что вернуться нельзя. И в таком случае кнопку Назад нужно заблокировать.Остальные проблемы - я не вникал. Я думаю это чисто технические вопросы и вы можете сами с ними справиться.
0
|
||
| 30.12.2018, 17:07 | |
|
Не по теме: Storm23, А почему на хабре не хотите подобное публиковать?
0
|
|
| 30.12.2018, 22:32 [ТС] | |
|
0
|
|
| 30.12.2018, 23:05 | |
|
Не по теме: Storm23, Речь то про подобные шла.
0
|
|
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
||||||
| 02.01.2019, 00:36 | ||||||
|
Storm23, с новым годом.
Вы правы, обленился что-то я. Еще несколько раз перечитал ваши шаги. Структуру все же полноценно не переварил, но уже легче ориентироваться в ядре) Так, что в итоге : 1. блокировка кнопки Назад для 1го вопроса : Кликните здесь для просмотра всего текста
2. Если в следующих вопросах список ответов зависел от ответа в предыдущих вопросах - варианты ответов у следующих вопросов вообще не появлялись - выходил пустой comboBox : В методе GoToPrevQuestion из класса InterviewManipulator убрал строчку interview.anketa.Remove(prevAnswer); Не понимаю почему, но все работает теперь вроде корректно)) 3. Как запретить проходить опрос без ввода чего-нибудь в поле ручного ввода пока не разобрался(
0
|
||||||
| 02.01.2019, 00:36 | |
|
Модель ООП Закрепить модель ООП Модель работы светодиода ооп ООП модель системы спама Ооп модель телефонного справочника Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|