Работа с радиокнопками – предварительные замечания
Для того, чтобы компьютер воспринимал несколько радиокнопок, как логическое целое, их надо объединить в группу. Это можно сделать двумя способами: 1) Создать на форме ЭУ «Рамка» (Frame) (раньше, чем радиокнопки) и разместить радиокнопки внутри этой рамки. 2) Использовать свойство GroupName (Имя группы). Его значение надо задавать в редакторском режиме, в окне свойств. Имя группы может быть произвольным, но одинаковым для всех радиокнопок данной группы. Удобно выделить сразу все кнопки (с Ctrl или Shift) и напечатать свойство один раз. При работе с радиокнопками мы будем использовать два свойства (см. справку «Свойства ЭУ»): · Value – для установки и получения значения кнопки (включено/выключено); · Caption – для вывода подписи к кнопке (текста ответа) Вывод информации на группу радиокнопок Воспользуемся опытом работы со списками и формализуем стоящую перед нами задачу. Мы хотим:
Сразу запишем очевидную часть решения: Dim i As Integer For i = 1 To Kol <Имя_кнопки>.Value = False <Имя_кнопки>.Caption = mesto1(i + 1, 1).Value Next i Единственная проблема, которую надо решить, – это обращение в цикле к кнопкам с разными именами. Можно считать это частым случаем основной проблемы цикла: написано должно быть что-то одно, а обращаться программа должна к разным объектам. Эта проблема решается с помощью «трюка», для понимания которого необходима дополнительная информация.
Семейство Controls В VBA существует семейство, объединяющее все элементы управления. Имя этого семейства – Controls. Наличие этого семейства позволяет обращаться к любому ЭУ по его имени. Controls(“<имя_ЭУ>”) Например, формулы Controls(“OptionButton1”) и OptionButton1 обращаются к одной и той же кнопке и совершенно равнозначны по результату. Отличие заключается в том, что в первой формуле <Имя_ЭУ> является аргументом строкового типа и может быть создано с участием строковых операторов и/или функций, например: Controls(“OptionButton” & 1) Обращение к группе радиокнопок с помощью цикла Если использовать имена, отличающиеся только числовым индексом (в т.ч. если сохранить имена по умолчанию), то числовой индекс имени можно задавать с помощью счетчика – Controls(“OptionButton” & i) – и, следовательно, можно осуществить перебор группы ЭУ с помощью цикла со счетчиком. Окончательное решение: Dim i As Integer For i = 1 To Kol Controls(“OptionButton” & i).Value = False Controls(“OptionButton” & i).Caption = mesto1(i + 1, 1).Value Next i Напомним, что в соответствии с нашим планированием программы, текст решения должен быть включен в процедуру vopros. Ввод информации с группы радиокнопок Радиокнопки устроены так, что в группе может быть включена только одна радиокнопка. Задача определения ответа пользователя сводится к следующему: надо перебрать группу радиокнопок, найти включенную кнопку (.Value = True) и выдать ее порядковый номер. С точки зрения алгоритма это классическая задача поиска позиции известного значения в списке. Ключевая проблема – обращение в цикле к кнопкам с разными именами – знакома по технике вывода информации на радиокнопки. Решение рекомендуется оформить как вложенную функцию. Ее очевидный параметр – количество радиокнопок в группе. Приведем вариант такой функции, рассчитанный на то, что сохранены имена кнопок, установленные по умолчанию.
Примечания: (1) Возможен сокращенный вариант этой строки (подумайте, почему): If Controls(“OptionButton” & i).Value Then (2) Если ни одна радиокнопка не включена, то значение функции – 0 (принцип договоренности, известный по стандартной задаче поиска позиции). В основной текст программы эта вложенная функция может быть включена следующим образом: otv = Option_Poz(Kol) (здесь Kol – глобальная переменная, значение которой известно на момент выполнения этой строки). Эта строка (а также перенос значения переменной otv в соответствующую ячейку электронной таблицы) должна быть включена в событийную процедуру «Дальше_Click», в раздел «обработки ответа пользователя». Работа над проектом Задание: Переделать всю работу с ответами на основе ЭУ «Радиокнопки». Редакторские действия: 1. Сделать копию существующего проекта (Меню–Файл–Сохранить как…) 2. Удалить элемент управления «Поле со списком». 3. Разместить на форме ЭУ «Рамка». 4. В пределах рамки разместить три радиокнопки. Убедиться, что им присвоены имена по умолчанию – OptionButton1 – 2 – 3. 5. Выделить все три радиокнопки и в окне свойств установить значение свойства GroupName – например, напечатать слово «ответы» (напомним, что при наличии рамки это не обязательно, но поучиться стоит). .Программирование В программном модуле надо: · в процедурах vopros и Дальше_Click заменить блоки текста, относящиеся к работе со списком, на новые, работающие с радиокнопками (они приведены в данном разделе); · не забыть набрать текст функции Option_Poz (также приводится в данном разделе) Работа на перспективу. Если вы следовали предыдущим указаниям, то у вас существуют два варианта проекта: со списком и с радиокнопками. Сейчас разумно выбрать, какой из них вам нравится больше и в дальнейшем работать именно с этим проектом. Можно потратить некоторое время на редакторскую работу с этим проектом (форматирование элементов управления – выбор шрифта, уточнение размеров и положения на форме в соответствии с объемом текста в вашем тесте).
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|