Выключатель (ToggleButton)
Воплотим предыдущую задачу в интерфейсе с выключателями (Рис. 10‑13).
Рис. 10‑13. Форма с выключателями
Начальные условия
1) при создании формы присвойте следующие имена элементам управления:
командной кнопке Отмена – cmdОтмена
выключателю Осенний семестр – tglОсень
выключателю Весенний семестр – tglВесна
2) саму форму назовите frmСеместрToggleButton.
Тогда код, который инициализирует форму с двумя выключателями, запишется так:
Sub frmСеместрToggleButton_Initialize()
With frmСеместрToggleButton
.cmdОтмена.Cancel = True
.Show
End With
End Sub
Процедуры обработки события Click для каждого элемента управления запишутся следующим образом:
Private Sub tglОсень_Click()
Выключатели
End Sub
Private SubtglВесна_Click()
Выключатели
End Sub
Sub Выключатели()
If tglОсень.Value = True And tglВесна.Value = True Then
MsgBox "Выбраны оба семестра!", vbInformation, _
"Сообщение"
ElseIf tglОсень.Value = True And tglВесна.Value = False Then
MsgBox "Выбран осенний семестр!", vbInformation, _
"Сообщение"
ElseIf tglОсень.Value = False And tglВесна.Value = True Then
MsgBox "Выбран весенний семестр!", vbInformation, _
"Сообщение"
Else
MsgBox "Не выбран ни один семестр!", vbInformation, _
"Сообщение"
End If
End Sub
Private Sub cmdОтмена_Click()
Unload Me
End Sub
Задание:
1. В Модуль11 наберите и протестируйте программу frmСеместрToggleButton_Initialize.
2. В модуле формы frmСеместрToggleButton наберите текст остальных программ и протестируйте работу приложения.
Переключатель (OptionButton)
В отличие от флажка и выключателя, переключатель позволяет выбрать только один из нескольких взаимоисключающих вариантов. Обычно переключатели собраны в группу и если установлен один, то остальные сброшены. Для удобства восприятия группы переключателей они, как правило, помещаются в рамку (Frame).
Итак, если пользователь должен выбрать только один семестр, создадим и пропишем форму, представленную на Рис. 10‑14.
Рис. 10‑14. Альтернативный выбор семестров
Начальные условия
0) при создании формы присвойте следующие имена элементам управления:
командной кнопке Отмена – cmdОтмена
выключателю Осенний семестр – optОсень
выключателю Весенний семестр – optВесна
1) саму форму назовите frmСеместрOptionButton.
Тогда код, который инициализирует форму с двумя переключателями, запишется так:
Sub frmСеместрOptionButton_Initialize()
With frmСеместрOptionButton
.cmdOK.Default = True
.cmdОтмена.Cancel = True
.optОсень.Value = True
.Show
End With
End Sub
Для того чтобы узнать, установлен переключатель или сброшен, воспользуемся свойством Value:
Private Sub cmdOK_Click()
If optОсень.Value = True Then
MsgBox "Выбран осенний семестр!", vbInformation, _
"Сообщение"
Else
MsgBox "Выбран весенний семестр!", vbInformation, _
"Сообщение"
End If
End Sub
Private Sub cmdОтмена_Click()
Unload Me
End Sub
Задание:
1. В Модуль11 наберите и протестируйте программу frmСеместрOptionButton_Initialize.
2. В модуле формы frmСеместрOptionButton наберите текст остальных программ и протестируйте работу приложения.
Счетчик (SpinButton)
С помощью счетчика в форме вводятся численные значения.
Рассмотрим пример создания простой формы для нахождения суммы чисел, принадлежащих некоторому диапазону.
§ Форма должна иметь следующий вид:
Рис. 10‑15. Форма для нахождения суммы чисел
§ Минимальное значение счетчиков 0, максимальное – 100.
§ Результат нахождения суммы выводить в поле Результат при изменении значений От и до(если значение в поле до: больше или равно значению в поле От).
§ Щелчок по кнопке Отмена выгружает форму из оперативной памяти.
Начальные условия
1) при создании формы присвойте следующие имена элементам управления:
полю От – txtОт
полю до – txtДо
Напоминане: именно в этих полях будут отображаться числовые значения, изменяемые с помощью счетчика. Не забудьте о них!
1-му счетчику – spnОт
2-му счетчику – spnДо
кнопке Отмена – cmdОтмена
полю Результат – txtРезультат
2) саму форму назовите frmСумма.
ВЫПОЛНЕНИЕ ЗАДАНИЯ:
1. Создайте форму.
2. Наберите текст программы инициализации формы (в модуле формы):
Private Sub UserForm_Initialize()
spnОт.Min = 0
spnОт.Max = 100
spnОт.SmallChange = 1
spnДо.Min = 0
spnДо.Max = 100
spnДо.SmallChange = 1
cmdОтмена.Cancel = True
End Sub
3. Дважды щелкните (в форме!) по элементу spnОт - появится пустая процедура Private Sub spnОт_Change. Далее наберите следующий код:
Private Sub spnОт_Change()
txtОт.Value = spnОт.Value
Сумма = 0
If Val(txtОт.Value) <= Val(txtДо.Value) Then
For i = Val(txtОт.Value) To Val(txtДо.Value)
Сумма = Сумма + i
Next
txtРезультат.Value = Сумма
Else
txtРезультат.Value = ""
End If
End Sub
4. То же самое проделайте для счетчика spnДо:
Private Sub spnДо_Change()
txtДо.Value = spnДо.Value
Сумма = 0
If Val(txtОт.Value) <= Val(txtДо.Value) Then
For i = Val(txtОт.Value) To Val(txtДо.Value)
Сумма = Сумма + i
Next
txtРезультат.Value = Сумма
Else
txtРезультат.Value = ""
End If
End Sub
Как вы видите, процедуры spnОт_Change и spnДо_Change очень похожи. Поэтому модернизируйте эти две программы, организовав вызов подпрограммы ИзменениеСчетчика.
5. Наберите программу обработки события «щелчок/нажатие кнопки cmdОтмена», которая выгружает форму из памяти:
Private Sub cmdОтмена_Click()
Unload frmСумма
End Sub
Замечания:
ü Встроенная функция Val преобразовывает число, написанное в символьном виде, в числовой формат.
ü Условие: If Val(txtОт.Value) <= Val(txtДо.Value) Then
проверяет упорядоченность чисел «От» и «до» по возрастанию. Если числа упорядочены, то считается сумма чисел, принадлежащих заданному диапазону, если нет, то сумма не подсчитывается и поле Результат пусто.
ü Верхнюю и нижнюю границы пользователь может вводить вручную. Для того чтобы программа реагировала на введенные числа, необходимо добавить процедуру обработки события «изменение значения поля ввода». Для поля ввода txtОт она выглядит следующим образом:
Private Sub txtОт_Change()
Сумма = 0
If Val(txtОт.Value) <= Val(txtДо.Value) Then
For i = Val(txtОт.Value) To Val(txtДо.Value)
Сумма = Сумма + i
Next
txtРезультат.Value = Сумма
Else
txtРезультат.Value.Value = ""
End If
End Sub
Аналогичная процедура будет и для поля ввода txtДо, поэтому целесообразно оформить их в виде вызова подпрограммы ИзменениеПоляВвода (напишите её самостоятельно).
6. В текстовом поле пользователь может сделать ошибку и ввести символ, а не цифру. Чтобы избежать этого, необходимо проверить введенную пользователем последовательность. Как вы знаете, это можно сделать с помощью встроенной функции IsNumeric. Тогда предыдущая процедура примет вид:
Private Sub txtОт_Change()
If IsNumeric(txtОт.Value) = True Then
Сумма = 0
If Val(txtОт.Value) <= Val(txtДо.Value) Then
For i = Val(txtОт.Value) To Val(txtДо.Value)
Сумма = Сумма + i
Next
txtРезультат.Value = Сумма
Else
txtРезультат.Value.Value = ""
End If
Else: MsgBox "Число введено неверно!"
End If
End Sub