Структура программы (уровень-1)
Представим действия программы и механизм их реализации в виде схемы:
Из схемы видно, что логический шаг (работа с одним вопросом) и зона действия событийной процедуры Дальше_Click не совпадают друг с другом: процедура Дальше_Click начинает с обработки ответа на один вопрос, а заканчивается выводом следующего. В этом заключается основная «хитрость» организации программ подобного типа. Итак, мы можем «утвердить» структуру событийной процедуры Дальше_Click: 1. Обработка ответа пользователя. 2. Переход к следующему вопросу (сдвиг объектных переменных) 3. Вывод вопроса (и вариантов ответа) Из схемы очевидны еще два решения: · Первый вопрос должен быть задан в «предыдущей» процедуре. · Вывод вопроса на экран удобно оформить, как отдельную процедуру (vopros) и использовать ее как вложенную в Дальше_Click и в «предыдущую» процедуру. На первом уровне создания нашей программы «предыдущей» процедурой будет стартовая процедура Форма_Инициализация. Работа над проектом Задание: Создать программу, которая просто выводит на экран все вопросы теста.
Редакторские действия: 1. Работаем в новом файле. 2. Двум листам рабочей книги присваиваем имена «Данные» и «Результаты». 3. На листе «Данные» набираем тест, начиная с ячейки A1, в формате, указанном в разделе «Организация данных». Напомним, что надо подобрать либо придумать тест с тремя вариантами ответа на каждый вопрос. 4. В редакторе Visual Basic создаем пользовательскую форму и размещаем на ней два элемента управления: · надпись (Label1) – для вывода вопроса · кнопку (CommandButton1); вручную пишем «Дальше» на кнопке. 5. Двойным щелчком по кнопке «Дальше», создаем модуль программ для формы и заготовку процедуры CommandButton1_Click. 6. Из раскрывающихся списков выбираем объект UserForm и событие Initialize, тем самым получаем заготовку для событийной процедуры Форма_Инициализация. Появившуюся «по пути» заготовку процедуры UserForm_Click можно удалить. Программирование В программном модуле нам надо объявить глобальные переменные, написать тексты двух событийных процедур и вложенной процедуры vopros. Все теоретические сведения и большинство рекомендаций были даны выше, поэтому приводим программные тексты с минимальными комментариями: Объявление глобальных переменных Dim mesto1 As Range Dim mesto2 As Range Dim kol As Integer Процедура Форма_Инициализация. Перед процедурой Форма_Инициализация стоят две задачи: · установка начальных значений глобальных переменных (стиль привязки объектных переменных обсуждался выше) · вызов процедуры vopros (ее текст пока не написан, но организовать ее вызов можно) Возможный текст процедуры: Private Sub UserForm_Initialize() Set mesto1 = Worksheets("Данные").Range("A1") Set mesto2 = Worksheets("Результаты").Range("B2") kol = 3 vopros End Sub Адрес переменной mesto2 объясняется тем, что мы хотим зарезервировать первый столбец и верхнюю строку для служебной информации. Процедура Дальше_Click Строим ее текст в соответствии с приведенной выше структурой.
1. Обработка ответа: Наша задача – вывести вопросы; поэтому данная часть процедуры пока отсутствует. 2. Переход к следующему вопросу (сдвиг объектных переменных): В начальном положении объектная переменная mesto1 привязана к ячейке с текстом вопроса, разумно сохранить такую привязку и при работе со следующими вопросами. Следовательно (для нашего планирования данных), при переходе к следующему вопросу объектную переменную надо сдвигать на 6-ую строку. При этом шаг сдвига явно зависит от количества ответов (переменной kol), соответственно, новый адрес: mesto1(kol + 3, 1). 3. Вывод вопроса: Сводится к вызову вложенной процедуры vopros. В результате получаем следующий текст процедуры: Private Sub CommandButton1_Click() Set mesto1 = mesto1(kol + 3, 1) vopros End Sub Процедура vopros Вывод текста вопроса удобно представить как перенос значения из ячейки электронной таблицы на элемент управления формы. В таблице адрес ячейки совпадает с объектной переменной mesto1, соответственно, обращение к ее значению имеет вид mesto1.Value. В форме мы работаем с надписью (Label1) и ее свойством Caption, соответственно, обращение к свойству: Label1.Caption. Единственная строка процедуры строится по принципу «тянуть на себя»: Sub vopros() Label1.Caption = mesto1.Value End Sub Работа с ответами Подход к уроку: Мы продолжаем работать над тестом с выбором ответа из нескольких предложенных. При работе с ответами надо уметь делать две вещи: · выводить текст ответов, т.е. переносить его из таблицы на элементы управления; · вводить ответы пользователя, т.е. определять выбранный ответ и запоминать его в таблице. Работу с ответами можно реализовать с помощью двух различных элементов управления: · списка (или поля со списком – с точки зрения программирования они похожи); · группы радиокнопок. Соответственно, материал темы можно представить в виде таблицы:
Данный порядок изложения соответствует заявленному ранее принципу: мы стараемся как можно быстрее получить работающий вариант программы, а затем осваиваем более мощные возможности.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|