Введение в программирование на примере VBA
Часть II. Создание макроса-приложения
Занятие 10. Обратное перемещение по списку вопросовЭто занятие посвящено продолжению написания кода и формированию минимально завершенного приложения. Подцикл 6. Обратное движение по списку вопросовЗадачей следующего подцикла будет создание возможности обратного продвижения по набору вопросов – от последнего к первому. Это следует сделать для того, чтобы тестируемый (пользователь) мог вернуться к предыдущему вопросу и изменить выбор. Возможно, в реальном тесте вы не захотите давать пользователям такую возможность, но в учебном приложении это следует сделать. ТребованияОпишем требования к этому действию. При нажатии на кнопку cmdPrev должен отображаться предыдущий вопрос и связанные с ним ответы. По достижении начала списка кнопка cmdPrev должна быть блокирована для предотвращения ошибочного перехода за границы набора. Не правда ли, это требование очень напоминает то, что делалось нами применительно к кнопке cmdNext? За исключением того, что передвижение делается в обратном порядке, и немного по-другому обрабатывается ситуация достижения границы набора. Проектирование
Как видите, здесь мы не делаем проверку, не на первом вопросе ли находимся. Блокирование кнопки предотвратит выход за границы набора. Флаг fStart введен по аналогии с флагом fEnd, на всякий случай.
<счетчик_вопросов> = <счетчик_вопросов> – 1 Все бы хорошо, но не забывайте о том, что при продвижении вперед был установлен флаг fEnd. Когда мы перейдем на предыдущий вопрос, этот флаг следует сбросить – ведь мы уже не в конце набора. Также надо будет изменить надпись на кнопке cmdNext. Сброс флага достижения конца набора при обратном продвижении
<счетчик_вопросов> = <счетчик_вопросов> – 1 Реализация
intCurrentRecord = intCurrentRecord
– 1 В этом коде вам неизвестно еще свойство кнопки Enabled – Доступность. Если это свойство сброшено – то есть равно False, то элемент управления становится «бледным» и какие-либо действия с ним невозможны. Установка свойства Enabled = True делает контрол доступным для работы, при этом он приобретает нормальный вид. Очевидно, что созданный код следует поместить в обработчик события Click кнопки cmdPrev.
Public fStart As Boolean ОтладкаТеперь можно попробовать сделать пробный запуск программы.
Ошибка при достижении начала списка Заметьте ошибочное поведение приложения при достижении первого вопроса в обратном движении. Кнопка cmdPrev становится «бледной» и недоступной для дальнейшего нажатия даже при передвижении вперед по списку вопросов. Действительно, мы не предусмотрели «разблокирования» этой кнопки.
Private Sub cmdNext_Click() Казалось бы, разница в структуре обработчиков прямого и обратного движения – момент проверки достижения границы набора. В обработчике прямого движения проверку достижения конца списка вопросов следует выполнять после чтения данных, а в обработчике обратного движения – до чтения данных. Но в нашем случае это несущественно. Мы предусмотрели блокировку выхода за границы набора.
Если вы были внимательны – приложение работает как надо. Перемещение по списку вопросов происходит без ошибок.
На этом первый цикл разработки закончен. Итог занятияЭто занятие получилось небольшим, не в пример предыдущему. Единственно новые сведения – о свойстве Enabled, присущем не только контролам CommandButton, но и большинству других. Имеется большая группа свойств, характерных для всех – или почти всех элементов управления. К этой группе можно отнести, например, свойства:
За недостатком места и времени мы не будем подробно останавливаться на этих свойствах. Но вот вам задание-конспект (а как вы думали? Занятие-то маленькое!) – составьте конспект к каждому свойству из этого списка, вот в таком формате:
Материал вы без труда найдете в справочной системе VBA. Ответ (с примером использования) должен занимать не более 4-5 строк для каждого свойства. Главное – понять смысл и научиться искать ответы. |