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

Работа с радиокнопками – предварительные замечания

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

1) Создать на форме ЭУ «Рамка» (Frame) (раньше, чем радиокнопки) и разместить радиокнопки внутри этой рамки.

2) Использовать свойство GroupName (Имя группы). Его значение надо задавать в редакторском режиме, в окне свойств. Имя группы может быть произвольным, но одинаковым для всех радиокнопок данной группы. Удобно выделить сразу все кнопки (с Ctrl или Shift) и напечатать свойство один раз.

При работе с радиокнопками мы будем использовать два свойства (см. справку «Свойства ЭУ»):

· Value – для установки и получения значения кнопки (включено/выключено);

· Caption – для вывода подписи к кнопке (текста ответа)

Вывод информации на группу радиокнопок

Воспользуемся опытом работы со списками и формализуем стоящую перед нами задачу. Мы хотим:

действие

сравнение со списком

1. Использовать цикл

как при работе со списками

2. На каждом шаге цикла, т.е. для каждой кнопки:

 
§ выключить кнопку (снять «точку»)

в отличие от списка придется выключать каждую кнопку, т.е. делать это внутри цикла

§ вывести текст ответа в качестве ее подписи

отличие будет в работе с ЭУ; обращение к ячейке таблицы останется без изменений

     

Сразу запишем очевидную часть решения:

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) и выдать ее порядковый номер. С точки зрения алгоритма это классическая задача поиска позиции известного значения в списке. Ключевая проблема – обращение в цикле к кнопкам с разными именами – знакома по технике вывода информации на радиокнопки.

Решение рекомендуется оформить как вложенную функцию. Ее очевидный параметр – количество радиокнопок в группе. Приведем вариант такой функции, рассчитанный на то, что сохранены имена кнопок, установленные по умолчанию.

Function Option_Poz(kol As Integer) примечания:
Dim i As Integer  
For i = 1 To kol  
 If Controls(“OptionButton” & i).Value = True Then (1)
Option_Poz = i  
Exit Function  
 End If  
Next i  
Option_Poz = 0 (2)
End Function  

Примечания:

(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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...