|
|
|
Создание программы - ООП модель, MVP30.10.2018, 11:10. Показов 74396. Ответов 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
|
|||||||||||||||||
| 02.01.2019, 18:30 | |||||||||||||||||
|
В том же методе, в том же классе interview.anketa.Remove(prevAnswer); заменил на interview.anketa.Remove(interview.Curren tAnswer); Экспорт теперь вроде работает корректно. Еще подкорректировал механизм возврата. У кнопки btBack остались теже методы : Кликните здесь для просмотра всего текста
А в конце метода Build формы прохождения опросника добавил : Кликните здесь для просмотра всего текста
Добавлено через 8 минут if-else заменил на
0
|
|||||||||||||||||
|
|
|||||||||||
| 02.01.2019, 18:49 [ТС] | |||||||||||
|
MIRAMIX,
Все правильно вы сделали (в последнем варианте) НО, вот это выражение interview.PassedAnswers.Count != 0 - это логика. А логики не должно быть в интерфейсе. Логика должна быть в модели.Поэтому в InterviewManipulator нужно сделать метод CanGoToPrevQuestion:
1
|
|||||||||||
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|||||||
| 02.01.2019, 21:08 | |||||||
|
Код огонь, никаких if else, а получаем правду/ложь. Несколько раз пересмотрел, чтоб понять)) Где всему этому научиться? Явно не по книжкам Добавлено через 2 часа 0 минут Storm23, ну никак не могу понять - как запретить проге принимать пустой ответ в строке ввода. Если пользователь ничего не ввел - вставлять в эксель дефолтную фразу null. Все файлы перелопатил. Логически, подходит вот это из InterviewManipulator : Кликните здесь для просмотра всего текста
Вроде есть условие - принимаем не пустые ответы, но на деле прохождение опросника идет как по маслу( Беда в том, что если пользователь ничего не введет - выходит ошибка при экспорте, типа ячейка в экселе пустая. Эта же ошибка выходит, если показ вопроса зависит от ответа в другом вопросе - то есть, если вопросов 5 и 5й вопрос зависим (может показаться, а может нет) - вылетает ошибка с отсутствием ответа. Последняя часть мелочи, переварю весь код, исправлю сам, но вот с пустым полем беда, ответ не обязателен от пользователя.
0
|
|||||||
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
||||||
| 08.01.2019, 22:21 | ||||||
|
Storm23, прошу помощи с проверкой на пустой ответ с ручным вводом.
Сделал вот так у кнопки перехода к следующему вопросу : Кликните здесь для просмотра всего текста
Так месседжбокс выходит и при выборе ответа из списка. В идеале - при пустом ответе отправлять ответ типа прочерка, но пытался хотя бы информировать, чтоб был дан ответ, но не работает(
0
|
||||||
|
|
|||||||||
| 09.01.2019, 10:00 [ТС] | |||||||||
|
Для проверки того, что ответ пустой сделайте в классе Answer свойство IsEmpty:
1
|
|||||||||
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|||||||
| 09.01.2019, 22:31 | |||||||
|
Storm23, огромное спасибо)
2я половина метода GoToNextQuestion : Кликните здесь для просмотра всего текста
На локальном тесте вроде все ок. Если эту проверку вставлять в обработчик кнопки перехода к следующему вопросу при прохождении опроса - нужно нажать 2 раза, чтоб ответ ("-") вставился и закрепился.
0
|
|||||||
| 09.01.2019, 22:50 | |
|
Не по теме: Storm23, в силу своей наивности, не всегда правильно понимаю речевые обороты. Надеюсь вы не о том, откуда руки у некоторых растут :)
0
|
|
|
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
|
|
| 11.08.2020, 15:25 | |
|
Storm23,
1. Можно ли рассматривать сообщения 1-13, 38 (Шаг 11: Добавление экспорта в БД) как пример ООП MVP ? 2. В данных сообщениях актуальные решения или нужно собирать по всей теме изменения к 1-13, 38 (Шаг 11: Добавление экспорта в БД) как пример ООП MVP? 3. Или есть обновлённое решение в одном месте? Задаю вопрос, потому, что бегло прочитал сообщения других пользователей.... многие критикуют данное решение.
0
|
|
|
|
||||
| 12.08.2020, 10:40 [ТС] | ||||
|
Soft17,
0
|
||||
|
0 / 0 / 0
Регистрация: 25.02.2021
Сообщений: 2
|
|
| 07.07.2021, 13:10 | |
|
Storm23, добрый день. Подскажите, пожалуйста, правильное с Вашей точки зрения решение проблемы замены юзерконтрола в зависимости от выбранного значения комбобокса в создающемся по умолчанию юзерконтролу с возможностью возврата к изначальному. Если не сложно, то пример кода был бы полезным. Заранее благодарю.
0
|
|
|
|
||
| 07.07.2021, 15:06 [ТС] | ||
|
Редактируется объект одного и того же класса? Или в зависимости от комбобокса нужно создавать/редактировать объекты разных классов? Если второе - то нужно просто создать юзерконтрол для нужного класса и передвать в его Build(...) нужный объект. Если первое - то не очень понятно, почему у объекта разные редакторы. Ну в принципе решается также - создаются разные юзерконтролы, в их Build передается один и тот же объект. В чем проблема то?
0
|
||
|
0 / 0 / 0
Регистрация: 25.02.2021
Сообщений: 2
|
||
| 07.07.2021, 15:15 | ||
|
Пошел по второму пути, создал разные юзерконтролы и передаю в них объект, но где-то в логике реализации ошибся, потому и просил пример кода.
0
|
||
|
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 395
|
||||||
| 15.12.2021, 16:21 | ||||||
|
Может вопрос уже где-то задавался, но внятного ответа я не нашел.
Как быть, если построение модели занимает время? (например, загружаются данные из Интернета)
в моем случае, пока BuildDataSource() не отработает, форма будет мертва.
0
|
||||||
|
Она кричала хватит
41 / 42 / 7
Регистрация: 21.05.2019
Сообщений: 112
|
|||||||
| 16.12.2021, 17:07 | |||||||
1
|
|||||||
|
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 395
|
|
| 18.12.2021, 20:03 | |
|
И ещё. Подскажите пожалуйста, почему тут - https://www.cyberforum.ru/atta... 1445438693 предпочитаются не конструкторы а статические классы для создания объектов модели?
0
|
|
|
|
||
| 19.12.2021, 10:19 [ТС] | ||
|
Например, для gif картинок вы захотите добавить свойство "продолжительность анимации". Для этого вы сделаете наследник class AnimatedFileItem : FileItem. И в этом классе пропишите свойство duration.Но как теперь создавать AnimatedFileItem вместо FileItem? Если использовать просто конструкторы, то получается, что решение о том какой класс создавать будет принимать внешний (по отношению к FileItem) код. Это нехорошо, потому что логика создания отдается на откуп внешнего кода, нарушается инкапсуляция. А вот если использовать статический метод Create внутри FileItem, то класс FileItem сам решает какой конкретно тип объекта создать, создает и возвращает его. При этом принятие решение об использовании конкретного наследника FileItem принимает сам FileItem. Сохраняется инкапсуляция; внешний код менять не потребуется.
1
|
||
|
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 395
|
|
| 19.12.2021, 11:09 | |
|
Storm23, но в этом примере все заранее известно. Поэтому все еще не понимаю. Или я просто взял пример, когда разработка еще кончилась?
0
|
|
|
|
||
| 19.12.2021, 12:36 [ТС] | ||
|
Это просто задел на будущее.
3
|
||
|
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 395
|
|
| 19.12.2021, 12:56 | |
|
Понял, благодарю.
0
|
|
| 19.12.2021, 12:56 | |
|
Модель ООП Закрепить модель ООП Модель работы светодиода ооп ООП модель системы спама Ооп модель телефонного справочника Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мобильное приложение 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
хоп хоп хоп хидахоп, а я кладую))
|