Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Структура программы (уровень-1)

Представим действия программы и механизм их реализации в виде схемы:

  Действия Процедуры

Работа с одним

вопросом

Программа выводит вопрос (и варианты ответа) Работает «предыдущая» процедура (вложенная процедура vopros)
Пользователь выбирает ответ Никакая процедура не работает
Пользователь щелкает по кнопке «Дальше» Запускается процедура Дальше_Click
Программа обрабатывает (запоминает) ответ.

 

 

Работает процедура Дальше_Click

 

(вложенная процедура vopros)

Программа переходит к следующему вопросу (сдвиг объектных переменных)

 

Программа выводит вопрос (и варианты ответа)
Пользователь выбирает ответ Никакая процедура не работает
и т.д.  

Из схемы видно, что логический шаг (работа с одним вопросом) и зона действия событийной процедуры Дальше_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

Работа с ответами

Подход к уроку:

Мы продолжаем работать над тестом с выбором ответа из нескольких предложенных. При работе с ответами надо уметь делать две вещи:

· выводить текст ответов, т.е. переносить его из таблицы на элементы управления;

· вводить ответы пользователя, т.е. определять выбранный ответ и запоминать его в таблице.

Работу с ответами можно реализовать с помощью двух различных элементов управления:

· списка (или поля со списком – с точки зрения программирования они похожи);

· группы радиокнопок.

Соответственно, материал темы можно представить в виде таблицы:

  Список Радиокнопки  

Цифрами указан порядок изложения материала.

Вывод 1 3  
Ввод 2 4  

Данный порядок изложения соответствует заявленному ранее принципу: мы стараемся как можно быстрее получить работающий вариант программы, а затем осваиваем более мощные возможности.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...