Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
 Аватар для Alexander-7
8 / 8 / 0
Регистрация: 08.03.2020
Сообщений: 68
Записей в блоге: 6

Заменить варианты ответов в RadioButton на кнопки – создаю тест с чтением из файла

13.09.2023, 15:04. Показов 2662. Ответов 35

Студворк — интернет-сервис помощи студентам
Hello, World! С днём программиста вас!

Пишу программу тестирования знаний студента. Программу прикрепляю. Вопрос, собственно, обозначен в заголовке. Мне к другой программе наподобие игры «Кто хочет стать миллионером» надо адаптировать этот тест: сделать варианты ответа в нём кнопками Button (сориентироваться можно по скриншоту здесь: Игра "Кто хочет стать миллионером" - как вывести текст кнопки с ответом вместо её свойства Tag?). И ещё надо, чтобы на следующий вопрос переходил НЕ по команде (кнопке), а сам, после щелчка на кнопке с ответом.

Пока переписывал код, разбирался в нем, пробовал сам переделать (после чего все навернулось и я просто скопировал его) и параллельно писал другую программу, немного запарился и запутался. Этот код уже просто скопировал из книги – он работает. Наверное, несложно сделать то, что хочу, но уже ступор в мозгах об этой программе. Поэтому прошу какую-то свежую мысль. Или подсказкой, или доработкой программы-теста помогите, пожалуйста!

Если надо, код программы тестирования с отдельным файлом взят из книги «Зиборов В.В. Visual C# 2010 на примерах. СПб.: БХВ-Петербург, 2011. – 432 с.»(пример 26). Вроде бы, её нет в открытом доступе. Поэтому могу бонусом скинуть книгу PDF в личку (или на почту, т.к. не нахожу, как здесь прикрепить файл к личному сообщению) тому, кто вызовется помочь мне полной трансформацией программы до желаемого вида.

PS: Ответить могу не сразу, т.к. долго этот вопрос готовил – поднадоело. Сейчас переключился на другую работу. Поэтому всем помогающим заранее спасибо!
Вложения
Тип файла: zip TestFromFile.zip (17.6 Кб, 32 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.09.2023, 15:04
Ответы с готовыми решениями:

Как загрузить вопрос в label и варианты ответов в RadioButton-ы
здравствуйте, делаю простую программу - тест. вот собственно сам проект но не знаю как загрузить вопрос в lable1 и варианты ответов в...

Варианты ответов (тест)
Если derived class (Class2) содержит переопределеную функцию из the base class (Class1), как может derived function вызывать the base...

Тест. Присваивание ответов RadioButton
Тест сделал. Решил варианты ответов присваивать в Радиобаттоны, но почемуто они не меняются... Присваивание радиобаттонам названий на 92...

35
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
14.09.2023, 17:24
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Alexander-7 Посмотреть сообщение
Вы это в каком-то другом редакторе делали, не в Visual Studio?
в Visual Studio.
Цитата Сообщение от Alexander-7 Посмотреть сообщение
и ещё 21 предупреждение
Цитата Сообщение от Alexander-7 Посмотреть сообщение
Это у меня какой-то сбой?
Чини компьютер свой . То архивы не открываются, то проекты с ошибками...
Цитата Сообщение от Alexander-7 Посмотреть сообщение
та часть кода, которая отвечает за считывание строк в кнопки из файла
Метод FillAnswersButtons() 78-я строка - моделирует (создает) кнопки с текущими ответами. А файл считался весь еще при загрузке окна программы. Он в памяти висит...
1
3271 / 3387 / 559
Регистрация: 17.02.2019
Сообщений: 5,306
14.09.2023, 17:50
открылось все и завелось без ошибок правда, правда.

Добавлено через 10 минут
Цитата Сообщение от Alexander-7 Посмотреть сообщение
Не извлекается из архива
а 7Zip бесплатный? У меня открыл все.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
14.09.2023, 17:56
Цитата Сообщение от January29 Посмотреть сообщение
7Zip бесплатный?
он же GNU LGPL. Где ты платный 7z видел?
0
3271 / 3387 / 559
Регистрация: 17.02.2019
Сообщений: 5,306
14.09.2023, 18:01
Цитата Сообщение от wizard41 Посмотреть сообщение
Где ты платный 7z видел?
так не где просто winrar вроде платный.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
14.09.2023, 18:04
Цитата Сообщение от January29 Посмотреть сообщение
winrar вроде платный
Ну да, он то платный. Только вот кто-то его хоть раз покупал когда-нибудь?
1
3271 / 3387 / 559
Регистрация: 17.02.2019
Сообщений: 5,306
14.09.2023, 18:06
Цитата Сообщение от wizard41 Посмотреть сообщение
Только вот кто-то его хоть раз покупал когда-нибудь?
Я не успел, деньга кончилась на карте или срок карты не помню
0
 Аватар для Alexander-7
8 / 8 / 0
Регистрация: 08.03.2020
Сообщений: 68
Записей в блоге: 6
14.09.2023, 18:32  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Чини компьютер свой
Да уж...
Цитата Сообщение от January29 Посмотреть сообщение
правда, правда
верю-верю. Буду пересматривать свои баги. 7Zip надо поставить, а то у меня только старенький ВинРар. Причем совсем старенький - Verion 3.41, Latest update: Tuesday, September 12, 2023 - зато тогда ещё пираты свободно крякали!
Цитата Сообщение от wizard41 Посмотреть сообщение
Только вот кто-то его хоть раз покупал когда-нибудь?
Зато у меня есть 20-летний кряк! Кстати, может Винрар обновить можно со старым кряком?...

Ну спасибо всем, кто принял участие. Буду теперь разбираться. Может, ещё чего-нибудь спрошу. Всего хорошего!

Добавлено через 7 минут
А нет, там не та дата. Я думал 2003. Как раз примерно тогда и купили этот диск, до сих пор храню его.

Добавлено через 1 минуту
Уже заработался. Пойду отдыхать.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
14.09.2023, 18:33
Цитата Сообщение от Alexander-7 Посмотреть сообщение
Кстати, может его обновить можно со старым кряком?...
Сигнатура ключа могла поменяться с тех пор. Но принцип лицензирования остался тот-же: рядом с exe-шником просто rareg.reg файл и все. Один купил, ключ всем раздал. И вся любовь
0
3271 / 3387 / 559
Регистрация: 17.02.2019
Сообщений: 5,306
14.09.2023, 18:42
Цитата Сообщение от Alexander-7 Посмотреть сообщение
Уже заработался. Пойду отдыхать
Везет же людям
0
 Аватар для Kazbek17
1485 / 939 / 455
Регистрация: 06.02.2012
Сообщений: 2,870
14.09.2023, 20:35
Цитата Сообщение от wizard41 Посмотреть сообщение
Только вот кто-то его хоть раз покупал когда-нибудь?

Не по теме:

Раньше покупали, сейчас это уже не проблема с распаковкой архива

0
14.09.2023, 20:50

Не по теме:

Цитата Сообщение от Kazbek17 Посмотреть сообщение
Раньше покупали
Ну не знаю, не знаю... Я с винраром был знаком еще во времена, когда HDD в компах были емкостью 128 Мб... Места всегда было мало, а куч файлового хлама и игрушек хватало. Тогда архивы были очень даже кстати - на CD-дисках буквально все было заархивировано, не говоря уже про диск ПК. Этот винрар был у всех и у каждого. Как правило крякнутый, но он и без кряка работает, просто надоедает окошком про активацию. Никогда я не слышал, чтобы кто-то его купил, а вот ключик (если у кого нет) передавался как на эстафете факел.
В любом компьютерном ларьке можно было купить CD-сборник софта (тогда модные были такие штуки) и на них, как правило, всегда был винрар с ключом активации. Т.е. и тогда и сейчас как-бы смысла нет платить деньги за то, что лежит бесплатно.
Такая же история с МС Офисом, не говоря уже про Виндовс...
Это сейчас модно стало (да и в некоторых случаях просто необходимо) иметь лицензионный софт. А тогда на это было пофиг всем. И так все работало.

0
 Аватар для Kazbek17
1485 / 939 / 455
Регистрация: 06.02.2012
Сообщений: 2,870
14.09.2023, 21:03
wizard41,

Не по теме:

В любой организации все компьютеры должны иметь оф документы(Лицензия) на каждый продукт, который установлен. Так что я конечно не буду спорить как у вас все это работает на шару, но это интересно.:D

0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
14.09.2023, 21:08
Цитата Сообщение от Kazbek17 Посмотреть сообщение
В любой организации

Не по теме:

Так я не про организации - я про обычных людей ))
Лет 15 назад я с рабочего (от слова на работе стоит) сервера таскал обновления АВ Касперского на флешке на домашний комп. Зачем мне было покупать лицензию "домой"? )

1
 Аватар для Alexander-7
8 / 8 / 0
Регистрация: 08.03.2020
Сообщений: 68
Записей в блоге: 6
16.09.2023, 16:31  [ТС]
Упс! Кажется, ключик от моего доисторического WinRAR 3.41 подошел к современной версии. Как в анекдоте, где русский один шар потерял, а один сломал. Причем, там была разрядность х32, а здесь х64. Может, конечно, потом какие-нибудь баги будут...

Согласно Википедии, WinRAR v3.80 – последняя версия, работающая в Windows 95, а WinRAR v3.93 – последняя версия, работающая в Windows 98, ME и NT 4.0. Вот здесь и надо было ставить смайлик . При этом до 2009 года считалось, что взлом электронной подписи в WinRAR (именно электронной подписи, а не пароля на архив) невозможен, и не существовало генератора файлов-лицензий с такой же функциональностью, как законные файлы лицензий, предоставляемые пользователям после приобретения ими лицензии. Всю историю копировать не буду, но как же они ошибались. В 2009 году их какие-то там хакеры взломали.
Как думаете, если я выложу сюда WinRAR 3.41 с ключом, меня не «побьют» за распространение пиратского ПО? Просто, чтобы не заботиться о его местонахождении, а то ради него один мой диск уже несколько городов объехал.

Теперь по основному вопросу. wizard41, вы файл JSON сами создавали? Я немного знаком с этим форматом, так же сделать, что ли... Потом, если ещё вопросы будут по этой теме, задам? Дружбу предложу, чтоб не теряться. Поразбираюсь попозже, мне это для диплома на курсах надо, пока времени совсем в обрез, ещё даже VS не переставлял.
0
3271 / 3387 / 559
Регистрация: 17.02.2019
Сообщений: 5,306
16.09.2023, 16:42
Цитата Сообщение от Alexander-7 Посмотреть сообщение
Как думаете, если я выложу сюда WinRAR 3.41 с ключом, меня не «побьют» за распространение пиратского ПО?
Ну согласно правилам форума, могут аяяй сотворить.
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
16.09.2023, 18:26
Alexander-7, чутка позже прокомментирую основные моменты в программе.
Цитата Сообщение от Alexander-7 Посмотреть сообщение
Как думаете, если я выложу сюда WinRAR 3.41 с ключом, меня не «побьют» за распространение пиратского ПО?
Не нужно этого делать. Тем более смысла вообще нет. Проблем с активированными/рабочими архиваторами сейчас ни у кого нет.

Добавлено через 1 час 42 минуты
Так, пройдемся по некоторым вещам...
Цитата Сообщение от Alexander-7 Посмотреть сообщение
файл JSON сами создавали?
Да, т.к. программа предполагает (вернее сказать - требует) наличие файла с вопросами, то естественно, нужно учесть ситуацию, что такого файла нет (при первом запуске).
Для этого, есть класс Helper со своим методом GetDefaultQuestions():
class Helper
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
    internal class Helper
    {
        public static QuestionGroupList GetDefaultQuestions()
        {
            Question[] defaultQuestions =
            {
                new Question("1/6. Основные компоненты вычислительной системы:",
                new List<Option>()
                {
                    new Option("процессор, звуковая карта, видеокарта, монитор, клавиатура", false),
                    new Option("монитор, клавиатура, материнская плата, процессор", false),
                    new Option("процессор, ОП, внешняя память, монитор, клавиатура", true),
                }),
 
                new Question("2/6. Во время исполнения прикладная программа хранится:",
                new List<Option>()
                {
                    new Option("в ПЗУ", false),
                    new Option("в процессоре", false),
                    new Option("в оперативной памяти", true),
                }),
 
                new Question("3/6. Иерархию усложнения данных можно представить в виде:",
                new List<Option>()
                {
                    new Option("Бит - Байт - Поле - Запись - Файл - База Данных", true),
                    new Option("Запись - Файл - Бит - Байт - База Данных - Поле", false),
                    new Option("База Данных - Байт - Поле - Запись - Бит - Файл", false),
                }),
 
                new Question("5/6. Экспоненциальное представлення числа -1,84E-04 соответствует числу:",
                new List<Option>()
                {
                    new Option("-0,000184", true),
                    new Option("-0,00184", false),
                    new Option("-18400", false),
                }),
 
                new Question("6/6. Текстовые данные кодируют с использованием:",
                new List<Option>()
                {
                    new Option("таблиц размещения файлов FAT, NTFS и др.", false),
                    new Option("таблиц символов Windows 1251, Unicode, ASCII и др.", true),
                    new Option("структурированного языка запросов SQL", false),
                }),
            };
 
            QuestionGroup group = new() { Subject = "Информатика и программирование" };
            group.Question.AddRange(defaultQuestions);
            QuestionGroupList list = new()
            {
                group
            };
            return list;
        }
    }

Именно он и вызывается, в случае, если таковой файл не обнаружен. Происходит эта проверка в момент загрузки окна:
C#
1
2
if (!File.Exists(path))
    questionList = Helper.GetDefaultQuestions();
Почему я выбрал JSON? Да потому, что вопросы и ответы к ним - это прежде всего объекты. JSON представляет наиболее удобный формат хранения и извлечения таких объектов. В случае с обычными же текстовыми файлами - возникает необходимость их многострочной обработки, как при записи, так и при чтении. Т.е. надо все эти строки парсить, разбирать что есть что и т.д.

Таким образом, при следующей загрузке окна (запуске приложения) такой файл с объектами уже готов, и он прямо десерилизуется в список вопросов (тестов):
C#
1
questionList = JsonConvert.DeserializeObject<QuestionGroupList>(File.ReadAllText(path));
Структура самого вопроса с ответами представлена в следующем виде:
класс Question - объект "Вопрос":
C#
1
2
3
4
5
6
7
8
9
10
11
    public class Question
    {
        public string Text { get; set; }
        public List<Option> Options { get; set; }
 
        public Question(string text, List<Option> options)
        {
            Text = text;
            Options = options;
        }
    }
Что мы тут видим: публичное свойство Text - это текст вопроса, и свойство Options, как список вариантов ответов на этот вопрос.
Каждый вариант ответа - тоже объект, представленный классом Option:
C#
1
2
3
4
5
6
7
8
9
10
11
    public class Option
    {
        public string Text { get; set; }
        public bool IsCorrect { get; set; }
 
        public Option(string text, bool isCorrect)
        {
            Text = text;
            IsCorrect = isCorrect;
        }
    }
Здесь Text - это текст варианта (ответа), и свойство IsCorrect, которое говорит о том, верный ли этот ответ для данного вопроса или нет.

В свою очередь, классы (набор классов) Question включены в следующий (верхний по иерархии) объект - класс QuestionGroup:
C#
1
2
3
4
5
    public class QuestionGroup
    {
        public string Subject { get; set; }
        public List<Question> Question { get; set; } = new();
    }
Это класс "групп" вопросов.
Здесь, свойство Subject - это "тематика" вопросов. В случае отсутствия файла JSON с вопросами, создается группа вопросов с темой "Информатика и программирование".
И свойство List<Question> Question - список классов (вопросов) по этой тематике.

И, наконец, вершина этой иерархии - класс QuestionGroupList, как список групп (классов QuestionGroup), являющий собой перечень всех вопросов в приложении. Поэтому он отнаследован от списка List<QuestionGroup>.

Далее, для динамического обновления UI (интерфейса программы) в зависимости от текущего вопроса/ответов, предусмотрен класс CurrentQuestion, который наследует базовый класс INPC BaseModel.
Когда поля (свойства этого класса) получают новые значения (новый вопрос и ответы), то интерфейс приложения автоматически обновляется согласно новым данным, благодаря реализации интерфейса INotifyPropertyChanged в базовом классе BaseModel:
abstract class BaseModel
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public abstract class BaseModel : INotifyPropertyChanged
    {
        #region PropertyChangedEventHandler
        public event PropertyChangedEventHandler? PropertyChanged;
 
        protected virtual void OnPropertyChanged([CallerMemberName] string? PropertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
        }
        #endregion
 
        protected virtual bool Set<T>(ref T field, T value, [CallerMemberName] string? PropertyName = null)
        {
            if (Equals(field, value)) return false;
            field = value;
            OnPropertyChanged(PropertyName);
            return true;
        }
    }

Как помним, список объектов вопросов сформирован уже на этапе загрузки окна: будь то прочитанный файл JSON, либо сформированный программным образом.
Теперь, формируются кнопки с вариантами ответов, методом FillAnswersButtons. При нажатии на любую из них - просто увеличивается индекс, по которому берется информация из questionList и процесс отрисовки кнопок повторяется (с очисткой предыдущих).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.09.2023, 18:26

Добавить варианты ответов (тест), чтение русского языка
Здравствуйте. Сделал тест , вопросы и ответы находятся в ini файле. Работает только два варианта ответов A / B. Работают они через True /...

Тест с тремя вариантами ответов: как прибавлять баллы при нажатии на RadioButton?
Есть тест и на каждый vopros три варианта ответов. Один из них - правильный. Отличается он от других по наличию значка &quot;+&quot; в...

прога-тест с открытым кодом, написанная на Си++ Билдер. Чтобы можно было добавлять самому вопросы и варианты ответов.
Помогите люди добрые. Нужна универсальная прога-тест с открытым кодом, написанная на Си++ Билдер. Чтобы можно было добавлять самому вопросы...

Cоздать тест с рандомным выводом ответов на кнопки
Нужно сделать тест из 10 вопросов и с 4 ответами которые будут выводиться рандомно. То есть должен быть label в который вводится 10...

Проблемы с чтением XML-файла (тест ПДД)
Задача состоит в том чтобы создать тест пдд, вопросы будут считываться с XML фаила..попробовал так но не получается.. using System.Xml; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru