Выключатель (ToggleButton)

Воплотим предыдущую задачу в интерфейсе с выключателями (Рис. 10‑13).

Выключатель (ToggleButton) - student2.ru

Рис. 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.

Выключатель (ToggleButton) - student2.ru

Рис. 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)

С помощью счетчика в форме вводятся численные значения.

Рассмотрим пример создания простой формы для нахождения суммы чисел, принадлежащих некоторому диапазону.

§ Форма должна иметь следующий вид:

Выключатель (ToggleButton) - student2.ru

Рис. 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

Наши рекомендации