#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
||||||||||||||||
1 | ||||||||||||||||
Опросник. Создание дерева зависимостей в treeView, сохранение дерева в XML, построение дерева в treeView из XML27.10.2018, 00:07. Показов 6097. Ответов 30
Всем доброго времени суток.
Тема является продолжением вот этой темы. Создаю 2ю, так как там был другой вопрос, который скорее решен. Вообщем суть задания - написать конструктор опросника. Потом где-то это надо сохранить. При повторном запуске окна админа, treeView1 должен строиться по файлу, в который сохранили дерево со всеми разветвлениями до этого. При запуске другого окна, должно быть чтение файла. Вот, посмотрите на пример построенного дерева из файла (тут еще проблема, о которой напишу ниже) : В другом окне надо определить, сколько у строки подстрок. Если более одной, то создать comboBox и все подстроки загрузить в него. В том числе и подсчитать сколько comboBox-ов создать динамически. В идеале, создатель опросника сразу должен иметь возможность указывать, создать элемент comboBox или textBox (чтобы вручную что-нибудь вводили пользователи). Благодаря участникам той темы, я узнал о treeView и возможности записывать это в xml. Вообще все равно куда записывать, главное чтобы все это работало. Пока treeView с xml единственный предложенный вариант, который соответствует поставленной задаче. Сейчас у меня проблема с сохранением и повторным чтением этого xml. Вот как файл выглядит после сохранения (xx-xx - время начала и конца смены, просто вбил любые цифры): Кликните здесь для просмотра всего текста
Код, что его создает : Кликните здесь для просмотра всего текста
Вот код чтения и построения treeView : Кликните здесь для просмотра всего текста
За несколько дней я уже больше ста страниц перечитал с разными вариантами записи/чтения + видосики с ютуба +о сериализации. Перепробовал все, если и работало, то при чтении не загружался текст последнего варианта в ветке(как собственно и у меня на снимке). Часто код чтения был рассчитан на 1е разветвление, а коды записи создавали файл с различной внутренней архитектурой. Голова закипела в итоге, удалил все и сегодня запилил то, что в спойлерах выше. Кода мало, вроде работает. НО! Создается файл с проблемами - записать пробелы/слешы невозможно. Наплевал, обошелся подчеркиваниями и дефисами. Читается с проблемой - Если ветка называется 5/2 - прочесть не может, ибо 1й символ не буква, а цифра. Плюю, будет _5_2 вместо человеческого 5/2. Это можно исправить? И самое главное - при чтении создается корневая ветка root, когда при создании опросника корневой было Выбери_график. И с root Уже сохранить не получается. Как это исправить? Что в итоге неясно: 1. Куда кроме xml можно сохранять опросник (но чтобы по нему строился treeView при повторном запуске админки)? 2. Можно ли в файле опросника дополнительно указывать, чтобы при запуске другого окна создавался comboBox или textBox? 3. Как исходя, например из моего дерева, определять, что надо создать comboBox и подгрузить в него такие-то варианты и если будет выбрано вот это, то при наличии подвариантов, создать новый comboBox. В моем примере, названия с вариантами - это текст для label-ов над comboBox-ами. Пока не дошел до этого, но думаю можно прочесть как-нибудь) 4. Как в моем коде состыковать чтение и запись (чтобы по-человечески отображались названия без _- и при повторном построении было тоже в treeView, что и при записи)? Умоляю, помогите, пожалуйста. Вроде задание элементарное, но проблем много... Очень очень надеюсь на какие-нибудь подсказки. Заранее огромное спасибо.
0
|
27.10.2018, 00:07 | |
Ответы с готовыми решениями:
30
Как отключить в treeView развёртывание дерева при двойном клике по элементу дерева TreeView: создание динамического дерева TreeView. Как вывести построение дерева файлов и папок в отдельный класс? Обход дерева treeview |
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
||||||||||||||||
29.10.2018, 22:12 [ТС] | 21 | |||||||||||||||
Storm23, не хотел Вам нагрубить, извините. Просто не туда ушли.
Давайте вернемся к заданию Использую Ваш FAQ расписал на листочке часть задания. Перевел часть кода в классы : Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Похоже на воплощение модели в код? Umatkot_Primtep, Storm23, Usaga, Woldemar89, Вы советуете забыть про внешний вид, продумать логику. Действительно, я дурак, увлекся GUI сразу. Благодаря этой теме, трудностями в процессе написания, я наконец начал заранее думать о принципах ООП. Классы выше тому подтверждение. Сейчас буду строить эту саму модель. Только очень прошу объяснить одно (можете называть дураком, не обижусь, так и есть (пока)) - как можно строить классы, не зная что будет отражено у пользователя, как будут создавать опросник? Я ни с кем не спорю, просто очень хочу понять вот это : сама задача - админ (человек) должен визуально в моей проге создавать эту зависимость. Подходит только один элемент, измученный treeView. Уже результаты treeView мы сохраняем, в xml. Даже если будет класс, ведь через него все равно будут сохраняться данные в xml. В самом treeView, визуально админом, задается зависимость, названия и т.п. В силу малого опыта с кодом, далеко сложно продумать. Нельзя забывать и о внешнем виде, и о том, как будет сохраняться при создании модели. Так вот, как делать одно, не зная, как будет остальное реализовано? Укажите, где я думаю неправильно, пожалуйста.
0
|
TheGreatCornholio
1254 / 732 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
|
|
29.10.2018, 22:21 | 22 |
Вы должны думать о том, какая структура данных или объект (а не какой UI контрол!!!)
максимально подходит для описания или хранения того, что вы называете "зависимость". Очередь, дерево, связный список, их комбинация\переопределение, свой класс итд.
1
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
30.10.2018, 03:57 | 23 |
MIRAMIX, почитайте вот это. это даст вам некоторое представление об ООП очень простым и наглядным примером.
http://artanovy.com/2011/03/pr... rovannogo/ Добавлено через 28 минут MIRAMIX, для планирования классов вам требуется нарисовать картину в голове, разбить задачу на подзадачи и сгруппировать подзадачи на классы - каждый класс должен быть ответственным за свою задачу и не более. Добавлено через 3 минуты А вы представляете, как строят небоскрёбы? Как начинают делать фундамент не зная, что на высоте 500 метров будет дуть сильный ветер? https://ru.wikipedia.org/wiki/... %D0%B9_101
1
|
12309 / 8678 / 1310
Регистрация: 21.01.2016
Сообщений: 32,609
|
|
30.10.2018, 06:03 | 24 |
Нет.
Опросник, как идея, существует ещё до воплощения его в бумаге, в виде приложения (десктопное, консольное, веб-приложение) или в виде экзамена словесного. Т.е. опросник - он один, но реализовать его самыми разным способами без изменения общего смысла. Вам предложили сделать тоже самое. Перечислить все объекты-участники вашего приложения, определить связи между ними и уже только потом оборачивать в инфраструктурные решения в виде сохранения в XML и визуализацию. Я, на вскидку, вижу это так: класс Questionnaire (опросник), в нём коллекция Question (вопрос), каждый из которых содержит в себе коллекцию AnswerOption (вариант ответа), в каждом из которых может быть признак верный он или нет. Так же, в опроснике может быть коллекция ключ-значение из пар вопрос-вариант_ответа (KeyValuePair<Question, AnswerOption>) или иной подход для формирования ответов на вопросы. Вот и всё. Это ваша модель опросника. Никакой завязки ни на способ хранения, ни на способ визуализации. Визуализация этого дела: перебор коллекции вопросов в классе опросника и вывод на экран. В каждом вопросе есть коллекция вариантов ответа, их тоже можно выводить. Надеюсь идея ясна?
2
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
30.10.2018, 07:11 | 25 |
MIRAMIX, Видите, как он описал модель? Он представил себе структуру, которая будет иметь какие-то взаимодействия между своими компонентами. Так как модель взаимодействия может быть разной на самом деле (это как вариант), то и в общем это является моделью, моделью классов, моделью бизнес логики. Если придерживаться данной модели, то она будет сама являться или блоком архитектуры - более сложной модели приложения. Сейчас была декомпозиция, которая позволила выделить не только элементы, но и ещё предполагаемых характер взаимодействия между ними сразу. Если это отобразить в виде UML или других моделей проектирования, то можно будет увидеть весь рабочий процесс и оценить его - и это всё без единой строчки кода.
Допустим, в своей модели, которую я показал выше нет вариантов ответов - правильные они или нет. Как бы я мог выйти из той ситуации? Я бы мог создать класс Repetitor, который мог бы отслеживать все опросы и проверять, кто на сколько что ответил - это был бы дополнительный компонент, он бы имел свою свободу действий и мог бы иметь доступ как к одному сеансу опроса, так и ко всем сразу для составления, например, отчётов. Как видите - вариантов может быть масса, вот ещё Storm добавит своё видение - будет уже третий вариант модели - по сути одного и того же бизнес процесса. Вот мы и хотим достучаться до вас, чтобы вы начали думать в этом направлении, если тема всё-таки лежит в рамках составления именно ТЗ, а не как доломать элемент управления TreeView, который и так телевизор уже. Добавлено через 6 минут не знаю даже, если будет идти древовидная зависимость следующего вопроса, то смысл верного варианта на промежуточном этапе как бы не должно быть, так как ведёт каждый вариант к новому варианту, который по циклу, в итоге приводит не к верному или не верному варианту, а к решению - конец пути. Вопрос 1 | | |-Вариант 1(он же вопрос(влечёт за собой другой вопрос)) | | | | | |-Вариант 1.1(он тоже вопрос(влечёт за собой другой вопрос)) | | | | | |-Конечная точка в дереве вариантов - путь Вопрос\1.1\Окончательный ответ | | |-Конечная точка в дереве вариантов 2 - путь Вопрос\1.1\Окончательный ответ 2 |-Вариант 2 и т.д.
1
|
31.10.2018, 00:07 | 26 |
Сообщение было отмечено MIRAMIX как решение
Решение
1
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|
31.10.2018, 00:21 [ТС] | 27 |
Woldemar89, Umatkot_Primtep, Usaga, Storm23,
спасибо)) дошло наконец. осталось переварить (после процедурного сложно мыслить иначе) и готово. тупил жестко, но того стоило
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
31.10.2018, 04:11 | 28 |
1
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|
31.10.2018, 08:04 [ТС] | 29 |
Storm23, Umatkot_Primtep,
кстати, я сразу то и не посмотрел на дату создания. действительно, с ума сойти! снимаю шляпу)
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
31.10.2018, 08:31 | 30 |
MIRAMIX,
Не по теме: да неожиданно
1
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|
06.11.2018, 02:09 [ТС] | 31 |
Всем огромнейшее спасибо за различные рекомендации/подсказки.
Лучшее решение выше, Опросник. Создание дерева зависимостей в treeView, сохранение дерева в XML, построение дерева в treeView из XML Дальнейшее обсуждение касаемо опросника уже там.
0
|
06.11.2018, 02:09 | |
06.11.2018, 02:09 | |
Помогаю со студенческими работами здесь
31
Вывод B-дерева в контрол TreeView Заполнение дерева (treeview) рекурсией Обход дерева в treeView. Подсчёт вероятностей TreeView Отследить удаления элемента дерева Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |