Практическая работа №7, ТЕСТ ПО ФИЗИКЕ
Постановка задачи
Создайте программу, выполняющую следующие действия.
После запуска программы появляется изображение аналогичное.
|
Если выбрано правильное название величины, то под словом «Оценка» появляется одобрительная реплика «Правильно», если выбрано неправильное слово, то – «Ошибка». Количество попыток ответа соответствует количеству записей в списке «Физическая величина».
Новым в этой работе является:
- обеспечение взаимодействия двух списков ListBox (вкладка Стандартные элементы управления)
- создание многострочных надписей в компоненте Label.
План разработки программы
1. Откройте новый проект.
2. Разместите в форме экземпляры компонент и присвойте заголовки меткам.
3. Обратите внимание, что заголовки меток «Физическая величина» и «Название величины» состоят из двух строк и отцентрированы.
4. Для вывода многострочных надписей в Label задайте:
Выделенный объект | Вкладка окна Свойства объекта | Имя свойства/ Имя события | Значение/Действие | |
Label1 | Свойства | AutoSize(изменение размера в зависимости от текста в Caption) | False | |
TextAlign (выравнивание текста) | Выбрать центр | |||
5. Сохраните код программы и проект.
6. Выделите ListBox1, справа от на кнопке с треугольником. В открывшемся меню выбрать Изменить элементы. В появившемся окне введите физические величины, каждую на новой строке: «Ватт», «Ом», «Вольт», «Ампер».
7. Выделите Listbox2 и проделайте с ним аналогичную работу, введя названия физических величин: «Напряжение», «Сопротивление», «Сила тока», «Мощность».
8. Вставьте в классе объявление переменных:
int Num1, // номер выбранной записи в первом окне
Num2, // номер выбранной записи во втором окне
CountR, // количество правильных ответов
CountC, // общее количество ответов
CountN; // общее количество вопросов теста
9. Создайте следующие процедуры обработки событий:
Выделенный объект | Имя события | Действие |
Form1 | Activated | CountN =4; // количество записей CountC =0; |
ListBox1 | KeyPress | if (e.KeyChar == (char)Keys.Enter) { Num1 = listBox1.SelectedIndex; listBox2.Focus(); } Комментарий Запоминает в переменной Num1 номер выбранной записи в первом окне. Делает активным объект Listbox2, т.е. после окончания ввода фокус перейдет в окно ввода Listbox2. |
ListBox2 | KeyPress | if (e.KeyChar == (char)Keys.Enter) switch (listBox2.SelectedIndex) { case 0: Num2 = 2; break; case 1: Num2 = 1; break; case 2: Num2 = 3; break; case 3: Num2 = 0; break; } if (Num1 == Num2) { label4.Text = "Верно"; CountR++; } else label4.Text = "Ошибка"; CountC++; if (CountC == CountN) MessageBox.Show("Тест окончен. Баллы: "+ Convert.ToDouble(CountR/CountN * 5) +" (правильных ответов: " + (CountR) + ")"); listBox1.Focus(); } |
Комментарий
Если выбрана запись во втором окне, то ее номер сравнивается на соответствие с ранее выбранным номером из первого окна (оператор Switch). В зависимости от результата сравнения выдается сообщение о правильности ответа, а затем проверяется на все ли вопросы получен ответ.
Задание для самостоятельного выполнения
1. Списки ListBox1 и ListBox2 сделайте поочередно доступными после нажатия клавиши Enter.
Подсказка. Установить значение False свойству Enabled компонента ListBox2, а в процедуру KeyPressed, относящуюся к ListBox1, включить строки:
ListBox2.Enabled = True;
ListBox1.Enabled = False;
3. Сделайте доступными списки ListBox1 и ListBox2 ни только после нажатия клавиши Enter, но и по щелчку мыши.
4. Расширьте количество физических величин до 10. Внести необходимые изменения в программу.
5. Сделайте так чтобы баллы обнулялись и можно было выполнять тест посе окончания заново. И сделайте так, чтобы после выбора пункта listBox сбрасывал значение SelectedIndex(Для этого в коде пропишите listBox.ClearSelected)