Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 24.10.2022
Сообщений: 15
1

Создание кнопки назад в тесте

28.11.2022, 23:00. Показов 605. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот черновик моей программы для тестирования.Вопросы считываются из файла(БД),результаты записываются в другой файл.Подскажите как сделать кнопку назад,чтобы пользователь имел возможность вернуться к предыдущему вопросу и поменять свой ответ,при возращении к предыдущему вопросу выбранный ранее ответ должен остаться отмеченным.Кому не сложно киньте какой нибудь исходник все голову сломал.И да программа состоит из трех форм,первая авторизация(пароль),вторая заполнение анкеты тестируемого и третья собственно тест. Бутон 3 в конце кода и является этой кнопкой,но не знаю что прописать.Буду благодарен любой помощи))

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
    public partial class Form3 : Form
    {
        string newText = "";
        // Внешние переменные:
        int СчетВопросов; // Счет вопросов
        int ПравилОтветов;  // Количество правильных ответов
        int НеПравилОтветов; // Количество не правильных ответов
        // Массив вопросов, на которые даны неправильные ответы:
        String[] НеПравилОтветы; // Размерность этого массива зададим позже
        int НомерПравОтвета;  // Номер правильного ответа
        int ВыбранОтвет;  // Номер ответа, выбранный студентом
        System.IO.StreamReader Читатель;
        public Form3(string Text)
        {
            InitializeComponent();
            newText = Text;
            
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
 
            TimeSpan ts = new TimeSpan(0, 1, 0);
            Task.Factory.StartNew(() =>
            {
                while ((ts.Minutes >= 0) && (ts.Seconds >= 0))
                {
 
                    label2.Invoke((Action)(() => { label2.Text = ts.ToString(); }));
                    Thread.Sleep(100);
                    ts = ts.Subtract(new TimeSpan(0, 0, 1));
 
                }
 
 
                label1.Text = "";
                radioButton1.Visible = false;
                radioButton2.Visible = false;
                radioButton3.Visible = false;
                label4.Text = "Тест выполнил:";
                label3.Text = newText;
                label1.Text = String.Format("Тестирование завершено.\n" +
                    "Правильных ответов: {0} из {7}.\n" +
                    "Оценка в пятибальной системе: {2:F2}.", ПравилОтветов,
                    СчетВопросов, (ПравилОтветов * 5.0F) / СчетВопросов);
                // 5F - это максимальная оценка
                button1.Text = "Начать тестирование сначала";
                button1.Enabled = true;
 
                // Вывод вопросов, на которые "Вы дали неправильный ответ":
                var Str = "СПИСОК ВОПРОСОВ, НА КОТОРЫЕ ВЫ ДАЛИ " +
                          "НЕПРАВИЛЬНЫЙ ОТВЕТ:\n\n";
                for (int i = 1; i <= НеПравилОтветов; i++)
                {
                    Str = Str + НеПравилОтветы[i] + "\n";
 
                }
                if (НеПравилОтветов != 0) MessageBox.Show(
                                         Str, "Тестирование завершено");
                //Тут ставим действие по окончании таймера.
 
            });
        }
        
        private void Form3_Load(object sender, EventArgs e)
        {
            timer1.Start();
            label3.Visible = false;
            label4.Visible = false;
            button1.Text = "Следующий вопрос";
            button2.Text = "Выход";
            button3.Text = "Предыдущий вопрос";
            button3.Enabled = false;
            // Подписка на событие изменение состояния
            // переключателей RadioButton:
            radioButton1.CheckedChanged += new EventHandler(ИзмСостПерекл);
            radioButton2.CheckedChanged += new EventHandler(ИзмСостПерекл);
            radioButton3.CheckedChanged += new EventHandler(ИзмСостПерекл);
            НачалоТеста();
          
        }
        void НачалоТеста()
        {
            var Кодировка = System.Text.Encoding.GetEncoding(65001);
            try
            {
                // Создание экземпляра StreamReader для чтения из файла
                Читатель = new System.IO.StreamReader(
                System.IO.Directory.GetCurrentDirectory() +
                                               @"\test.txt", Кодировка);
 
                // Обнуление всех счетчиков:
                СчетВопросов = 0; ПравилОтветов = 0; НеПравилОтветов = 0;
                // Задаем размер массива для НеПравилОтветы:
                НеПравилОтветы = new String[100];
            }
            catch (Exception Ситуация)
            {   // Отчет о всех ошибках:
                MessageBox.Show(Ситуация.Message, "Ошибка",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            ЧитатьСледВопрос();
        }
        void ЧитатьСледВопрос()
        {
            label1.Text = Читатель.ReadLine();
 
            // Считывание вариантов ответа:
            radioButton1.Text = Читатель.ReadLine();
            AutoSize = true;
            radioButton2.Text = Читатель.ReadLine();
            AutoSize = true;
            radioButton3.Text = Читатель.ReadLine();
            AutoSize = true;
            // Выясняем, какой ответ - правильный:
            НомерПравОтвета = int.Parse(Читатель.ReadLine());
            // Переводим все переключатели в состояние "выключено":
            radioButton1.Checked = false;
            radioButton2.Checked = false;
            radioButton3.Checked = false;
            // Первую кнопку задаем не активной, пока студент не выберет
            // вариант ответа
            button1.Enabled = false;
            СчетВопросов = СчетВопросов + 1;
            // Проверка, конец ли файла:
            if (Читатель.EndOfStream == true) button1.Text = "Завершить";
        }
        void ИзмСостПерекл(Object sender, EventArgs e)
        {
            // Кнопка "Следующий вопрос" становится активной, и ей
            // передаем фокус:
            button1.Enabled = true; button1.Focus();
            System.Windows.Forms.RadioButton Переключатель = (System.Windows.Forms.RadioButton)sender;
            var tmp = Переключатель.Name;
            // Выясняем номер ответа, выбранный студентом:
            ВыбранОтвет = int.Parse(tmp.Substring(11));
        }
 
        
        
        private void button1_Click(object sender, EventArgs e)
        {
            
            // Щелчок на кнопке
            // "Следующий вопрос/Завершить/Начать тестирование снач"
            // Счет правильных ответов:
            if (ВыбранОтвет == НомерПравОтвета) ПравилОтветов =
                                                ПравилОтветов + 1;
            if (ВыбранОтвет != НомерПравОтвета)
            {
                // Счет неправильных ответов:
                НеПравилОтветов = НеПравилОтветов + 1;
                // Запоминаем вопросы с неправильными ответами:
                НеПравилОтветы[НеПравилОтветов] = label1.Text;
            }
            if (button1.Text == "Начать тестирование сначала")
            {
                button1.Text = "Следующий вопрос";
                // Переключатели становятся видимыми, доступными для выбора:
                radioButton1.Visible = true;
                radioButton2.Visible = true;
                radioButton3.Visible = true;
              
                // Переход к началу файла:
                НачалоТеста(); return;
            }
            if (button1.Text == "Завершить")
            {
                
                // Закрываем текстовый файл:
                Читатель.Close();
                // Переключатели делаем невидимыми:
                radioButton1.Visible = false;
                radioButton2.Visible = false;
                radioButton3.Visible = false;
                // Формируем оценку за тест:
                label3.Visible = true;
                label4.Visible = true;
                label4.Text = "Тест выполнил:"; 
                label3.Text = newText;
                label1.Text = String.Format("Тестирование завершено.\n" +
                    "Правильных ответов: {0} из {1}.\n" +
                    "Оценка в пятибальной системе: {2:F2}.", ПравилОтветов,
                    СчетВопросов, (ПравилОтветов * 5.0F) / СчетВопросов);
                // 5F - это максимальная оценка
                button1.Text = "Начать тестирование сначала";
                // Вывод вопросов, на которые "Вы дали неправильный ответ":
                var Str = "СПИСОК ВОПРОСОВ, НА КОТОРЫЕ ВЫ ДАЛИ " +
                          "НЕПРАВИЛЬНЫЙ ОТВЕТ:\n\n";
                for (int i = 1; i <= НеПравилОтветов; i++)
                {
                    Str = Str + НеПравилОтветы[i] + "\n";
 
                }
 
                using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"result.txt"))
                {
                    file.WriteLine(label4.Text);
                    file.WriteLine(label3.Text);
                    file.WriteLine(Text = "Колличество правильных:");
                    file.WriteLine(ПравилОтветов);
                    file.WriteLine(Str);
                    file.WriteLine(Text = "Оценка за тест:");
                    file.WriteLine((ПравилОтветов * 5.0F) / СчетВопросов);
                    file.Close();
                }
                    
                // Если есть неправильные ответы, то вывести через
                // MessageBox список соответствующих вопросов:
                if (НеПравилОтветов != 0) MessageBox.Show(
                                          Str, "Тестирование завершено");
            } // Конец условия if (button1.Text == "Завершить")
            if (button1.Text == "Следующий вопрос") 
            {
                
                ЧитатьСледВопрос();
                    };
        }
        private void label2_Click(object sender, EventArgs e)
        {
 
        }
 
        private void button2_Click_1(object sender, EventArgs e)
        {
           
            // Щелчок на кнопке "Выход"
            this.Close();
        }
 
 
       
 
        private void Form3_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = true;
            Hide();
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
           
        }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2022, 23:00
Ответы с готовыми решениями:

Нажатие кнопки назад сворачивает прогу а не переходит назад
Собсно дело в сабже Переходя на новое активити интентом, я бы хотел порождать новый стэк, и...

Не работает код для кнопки в тесте
Добрый день! При запуске теста код как будто игнорируется и в окне результатов не выводится даже...

Unix Time | Вчера, 2 дня назад, 4 недели назад, 2 месяца назад
Здравствуйте, я профессиональный нуб в PHP. Прошу помочь с решением вывода даты в PHP. У меня...

Вывод результата в тесте по нажатию кнопки в turbodelphi 2006
Доброго времени суток! Столкнулся с проблемой вывода результата в тесте по информатике. Не могу...

Реализация кнопки 'Назад'
Добрый вечер. Возникла проблема при реализации кнопки 'Назад' на PyQT5. В классе StartSelect с...

8
2806 / 1676 / 884
Регистрация: 14.04.2015
Сообщений: 5,717
28.11.2022, 23:32 2
Daniil037, это хорошо, что у Вас были попытки, но язык c# строится на объектах, у Вас их нет, и делать какие-то костыли не очень хочется. проще говоря, этот код нужно переделать
0
0 / 0 / 0
Регистрация: 24.10.2022
Сообщений: 15
29.11.2022, 10:11  [ТС] 3
Я бы с радостью,но это курсовая и сроки прямо сильно поджимают.На это просто нет времени,мне нужно хотя бы что то чтобы кнопка назад функционировала.С# мы не изучаем,все написано так как хоть что то я понял в написании на этом языке.Можете какую нибудь кляксу написать для работы кнопки)))
0
2806 / 1676 / 884
Регистрация: 14.04.2015
Сообщений: 5,717
29.11.2022, 10:37 4
Daniil037, тогда присылайте проект целиком в виде архива
1
0 / 0 / 0
Регистрация: 24.10.2022
Сообщений: 15
29.11.2022, 16:26  [ТС] 5
Если есть возможность доработать что то принимается,даже очень.Большое вам спасибо за отзывчивость и за обратную связь.Немного не корректно работает таймер.Во время истечении времени не дойдя до конца и не завершив тест должны вывестись результаты и оценка.После нажатия "начать тест сначала" таймер должен начаться заново.Это я расписал чтобы вы поняли суть и работу самой программы.Еще раз большое спасибо.
Вложения
Тип файла: rar Курсовая работа по программированию .rar (253.3 Кб, 15 просмотров)
0
2806 / 1676 / 884
Регистрация: 14.04.2015
Сообщений: 5,717
29.11.2022, 19:36 6
Лучший ответ Сообщение было отмечено Daniil037 как решение

Решение

Daniil037, можете смотреть обновленный вариант.
только нужно сначала зайти в Programm.cs и изменить строку
C#
1
Application.Run(new Form3(""));
на
C#
1
Application.Run(new Form1());
Ваш код для 3й формы, увы, улетел в мусорку целиком.
Вложения
Тип файла: 7z Курсовая работа по программированию.7z (3.21 Мб, 25 просмотров)
0
0 / 0 / 0
Регистрация: 24.10.2022
Сообщений: 15
29.11.2022, 22:18  [ТС] 7
Не могу открыть программу со всем кодом.Приложение запускается,все очень круто,но код с тремя формами не открывается,не подскажите что делать.Строки поменял как вы сказали.

Добавлено через 7 минут
Все получилось.Спасибо вам большое,видна рука профессионала,ничего лишнего и все так минимизировано и аккуратно.Вы меня сильно выручили.Очень классно получилось.Все вам хорошего)Думал таких людей не осталось.Удачи вам!!
0
2806 / 1676 / 884
Регистрация: 14.04.2015
Сообщений: 5,717
29.11.2022, 22:19 8
Daniil037, запускаете файл проект .sln в корне. далее справа в обозревателе решений дважды жмете на Form3, откроется сама форма, далее - правкой кнопкой мыши и выбираете - перейти к коду
0
0 / 0 / 0
Регистрация: 24.10.2022
Сообщений: 15
29.11.2022, 22:29  [ТС] 9
Все получилось.Спасибо вам большое,видна рука профессионала,ничего лишнего и все так минимизировано и аккуратно.Вы меня сильно выручили.Очень классно получилось.Все вам хорошего)Думал таких людей не осталось.Удачи вам!!
0
29.11.2022, 22:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2022, 22:29
Помогаю со студенческими работами здесь

Кнопки вперед-назад
Помогите пожалуйста с настройкой кнопок навигации &quot;вперед&quot; &quot;назад&quot;. Разрабатываю обучающую...

кнопки назад вперед
Я сделал БД в SQL вывел таблицу в datagriev. Помогите написать код на кнопки в &quot;начало&quot;, &quot;конец&quot;, и...

Кнопки вперед/назад
Здравствуйте, подскажите как на странице редактирования сделать кнопки &quot;вперед&quot; и &quot;назад &quot;. Уже все...

FoxPro - кнопки вперед, назад
не могу не как вспомнить в FoxPro при создание базы данных, в форме кнопки вперед, назад я вот ...

Отключены кнопки вперед - назад
Здравствуйте! Такая проблема: в панели инструментов кнопочки вперед - назад стали не активными, и...

Пагинатор кнопки вперед назад
ребят как сделать в данном классе кнопки вперед и назад? &lt;?php /* * Класс для...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru