
информатика_2_3
.pdf
True флажка Включить и переключателя Кредитная карта.
Выполните следующую последовательность действий.
Перейдите в редактор Visual Basic и откройте форму frmГосте-
выеРасходы.
Дважды щелкните на флажке Включить, чтобы открыть окно кода. В списке событий в верхней части окна кода выберите событие Change и в процедуру chkВключить _Change введите следующий
код:
If chkВключить.Value = True Then lblСумму.Enabled = True txtСумму.Enabled = True
Else
lblСумму.Enabled = False txtСумму.Enabled = False End If
В левом верхнем списке над окном кода щелкните на кнопке со стрелкой, направленной вниз. В открывшемся списке выберите optКредитнаяКарта (переключатель Кредитная карта).
В списке событий выберите событие Change. В окне кода отобразится заголовок процедуры optКредитнаяКар-
та _Change.
Введите код этой процедуры:
If optКредитнаяКарта.Value = True Then
lblТипКарты.Enabled = True cmbТипКарты.Enabled = True lblНомерКарты.Enabled = True txtНомерКарты.Enabled = True lblОкончание.Enabled = True txtОкончание.Enabled = True Else
lblТипКарты.Enabled = False cmbТипКарты.Enabled = False lblНомерКарты.Enabled = False txtНомерКарты.Enabled = False lblОкончание.Enabled = False txtОкончание.Enabled = False End If
21

Перейдите в рабочую книгу на Лист1 и щелкните на командной кнопке. Отобразится форма.
Установите флажок Включить. Поле ввода сумму станет доступным.
Установите переключатель Кредитная карта. Связанные с этим переключателем поля станут также доступными.
Закройте форму и сохраните рабочую книгу. Возвратитесь в редак-
тор Visual Basic.
В процедуре optКредитнаяКарта_Change событие Change использовалось для проверки значения свойства Value, и в зависимости от этого значения блокировка элементов управления или снималась (свойство Enabled равно True) или устанавливалась (свойство Enabled равно False). Но при обработке события Change вы не ограничены работой только со свойством Enabled, можно изменить значения таких свойств элементов управления, как Text, Value или Caption.
Проверка вводимых данных
После того как пользователь ввел всю нужную информацию в форму, он щелкает на кнопке Сохранить. Что должно произойти после этого? Процедура, которая запускается на исполнение после щелчка на кнопке Сохранить, должна проверить правильность введенных данных и в случае их корректности записать данные в рабочий лист.
22
Начнем с проверки правильности данных. Понятие правильности (корректности) данных зависит от выполняемого приложения. Поле ввода может принять все, что вы способны ввести с клавиатуры. И если вы ввели какую-нибудь абракадабру, то это не значит, что введенное значение некорректно. Все зависит от тех ограничений, которые накладывает приложение на вводимые данные. Например, на разрабатываемой нами экранной форме есть поле ввода Номер комнаты. Очевидно, что корректными значениями для этого поля будут целые положительные числа. Далее предположим, что в нашем отеле сдаются только комнаты с номерами от 101 до 730. В этом случае корректными данными для поля будут лишь целые числа из указанного интервала. Аналогичные ограничения должны накладываться на значения полей Тип расходов, Сумма, Дата, а также на значения полей группы Способ оплаты. (Обратите внимание на маленькую, но существенную деталь: проверку поля сумму и полей с данными о кредитной карте надо выполнять только тогда, когда эти поля разблокированы.)
Приступим к созданию процедуры, которая будет выполняться после щелчка на кнопке Сохранить и проверять корректность введенных данных. Выполните следующие действия.
В редакторе Visual Basic отобразите разрабатываемую форму. Дважды щелкните на кнопке Сохранить. В окне кода появится за-
головок процедуры cmdSave_Click. Введите следующий код этой процедуры:
If Val(txtНомерКомнаты.Text)<101 Or Val(txtНомерКомнаты.Text) >730 Then
MsgBox "Неправильный номер комнаты" txtНомерКомнаты.SetFocus
Exit Sub
End If
If txtИмяГостя.Text = "" Then
MsgBox "Пожалуйста, введите имя гостя" txtИмяГостя.SetFocus
Exit Sub
End If
If chkВключить.Value = True Then
If txtСумму = "" Then
MsgBox "Если установлен флажок Включить, то надо ввести число в поле сумму"
txtСумму.SetFocus
Exit Sub
End If
End If
If txtСумма.Text = "" Then
23
MsgBox "Пожалуйста, введите сумму расходов" txtСумма.SetFocus
Exit Sub
End If
If IsNumeric(txtСумма.Text) = False Then
MsgBox "Сумма должна быть числом" txtСумма.SetFocus
Exit Sub
End If
If txtДата.Text = "" Then MsgBox "Необходимо ввести дату" txtДата.SetFocus
Exit Sub
End If
If optКредитнаяКарта.Value = True Then
If optКредитнаяКарта = "" Then
MsgBox "Пожалуйста, введите номер кредитной карты" optКредитнаяКарта.SetFocus
Exit Sub
End If
If txtОкончание.Text = "" Then MsgBox "Введите дату окончания карты" txtОкончание.SetFocus
Exit Sub
End If
End If Unload Me
Перейдите в рабочую книгу и щелкните на командной кнопке, открывающей форму.
Щелкните на кнопке Сохранить. Появится окно с сообщением: "Неправильный номер комнаты".
Щелкните на кнопке ОК, чтобы закрыть окно сообщения. Введите 121 в поле Номер комнаты и щелкните на кнопке Сохранить. В другом появившемся окне сообщения щелкните на кнопке ОК.
Введите свое имя как имя гостя. Введите 2000 в поле Сумма. Щелкните на флажке Включить, а затем на кнопке Сохранить. По-
явится очередное окно сообщения с предложением ввести данные в поле сумму. Щелкните на кнопке ОК, чтобы закрыть это окно.
Введите число 500 в поле Сумму и щелкните на кнопке Сохранить. Форма исчезнет с экрана.
Вы, конечно, заметили, что в этой процедуре проверялись свойства Text и Value элементов управления. Рассмотрим подробнее код одной такой проверки.
24

Проверка значения поля Номер комнаты_
If Val(txtНомерКомнаты.Text) < 101 Or Val(txtНомерКомнаты.Text) > 730 Then
MsgBox "Неправильный номер комнаты" txtНомерКомнаты.SetFocus
Exit Sub
End If
Здесь оператор If проверяет, находится ли значение поля txtНомерКомнаты в интервале от 101 до 730. Отметим применение функции Val, преобразующей строковое значение в числовое. Она необходима из-за того, что значение свойства Text (т.е. введенное в поле значение) имеет строковый (текстовый) тип данных. Вы обратили внимание, что здесь нет проверки той ситуации, когда пользователь вообще ничего не ввел в это поле? Просто эта ситуация подпадает под тот случай, когда введенное значение меньше 101.
Метод SetFocus делает активным указанный элемент управления формы. Оператор выхода из процедуры Exit Sub используется после каждой проверки, так как нет смысла продолжать процедуру, если ошибка обнаружена и выведено соответствующее окно сообщения. Если ошибки не обнаружены, то с помощью оператора Unload Mе форма выгружается из памяти компьютера и удаляется с экрана.
25

Сохранение данных, введенных в форму
Проверка корректности данных — это только одна задача, которую решает процедура cmdSave_Click. Вторая задача, решаемая данной процедурой, заключается в записи данных, введенных в форму, в ячейки рабочего листа. Для этого применяются уже проверенные на корректность значения свойств Text и Value элементов управления. Используйте следующие инструкции для завершения написания про-
цедуры cmdSave_Click.
Перейдите на рабочий лист Лист3 и переименуйте его на Расходы. В первой строке листа создайте строку заголовков, повторяющую
названия элементов управления формы. За образец возьмите рабочий лист, показанный на рисунке.
Перейдите в редактор Visual Basic и отобразите экранную форму. Чтобы открыть окно кода, дважды щелкните на кнопке Сохранить. Введите в процедуру cmdSave_Click перед оператором Unload
Me следующий код:
Worksheets("Расходы").Activate
Range("A2").Select
If Range("A2").Value = "" Then Range("A2").Activate
Else Range("A2").CurrentRegion.Select
ActiveCell.Offset(Selection.Rows.Count, 0).Activate End If
With ActiveCell
.Value = txtНомеркомнаты.Text
.Offset(0, 1).Value = txtИмяГостя.Text
.Offset(0, 2).Value = cmbТипРасходов.Text
.Offset(0, 3).Value = txtСумма.Text
.Offset(0, 4).Value = txtДата.Text If chkВключить.Value = True Then
.Offset(0, 5).Value = txtСумму.Text
End If
If optВключитьВСчет.Value = True Then
.Offset(0, 6).Value = "В счет" ElseIf optНаличными.Value = True Then
26

.Offset(0, 6).Value = "Наличные" ElseIf optЧеком.Value = True Then
.Offset(0, 6).Value = "Чеком"
ElseIf optКредитнаяКарта.Value = True Then
.Offset(0, 6).Value = "КредитнаяКарта"
.Offset(0, 7).Value = cmbТипКарты.Text
.Offset(0, 8).Value = txtНомерКарты.Text
.Offset(0, 9).Value = txtОкончание.Text
End If
End With
Перейдите в рабочую книгу на Лист1. Сохраните рабочую книгу.
Щелкните на кнопке, вызывающей экранную форму. Введите 415 в поле Номер комнаты и ваше имя в качестве имени гостя. Выберите в списке Тип расходов пункт Уроки гольфа. В поле сумма введите число 100. Установите флажок Включить и в поле сумму введите 1000. Установите переключатель Кредитная карта и выберите тип карты Visa. Введите номер кредитной карты 112233, а срок окончания годности карты — 1.01.14. Щелкните на кнопке Сохранить.
Форма закроется, а введенные в нее данные будут записаны в ячейки рабочего листа Расходы.
Во второй части кода процедуры сначала делается текущим рабочий лист Расходы, а затем — ячейка А2. Ввод данных начинается со второй строки рабочего листа, так как в первой размещены заголовки столбцов. Далее проверяется, занята ли ячейка А2. Если нет, то начинается запись данных. Если ячейка А2 занята, то находится последняя занятая ячейка. Здесь ведущую роль играет свойство CurrentRegion (Текущая область) объекта Range. После выделения текущей области можно определить ее размеры и, следовательно, найти первую свободную строку. Для этого используется свойство Offset (Смеще-
ние).
Далее в процедуре идет непосредственно запись введенных данных в рабочий лист. Затем проверяется, установлены ли флажок Включить
27
и переключатель Кредитная карта, и если установлены, то также переписываются данные из соответствующих полей.
Для того чтобы наша форма стала функционально полностью завершенной, необходимо написать еще одну процедуру — для кнопки
Отмена.
Перейдите в редактор Visual Basic и дважды щелкните на кнопке Отмена. Откроется окно кода с заголовком процедуры cmdCancel_Click.
В эту процедуру введите следующую строку кода:
Unload Me
Сохраните рабочую книгу.
Теперь, если пользователь щелкнет на кнопке Отмена, то экранная форма удалится из памяти компьютера и с экрана. В реальных приложениях при щелчке на кнопке Отмена часто открывается окно сообщения, требующее подтверждение на закрытие формы. Надеюсь, для вас не составит большого труда добавить в процедуру cmdCancel_Click код, открывающий такое окно сообщения.
Задание
В качестве упражнения создайте форму, показанную на рисунке. Имя формы frmЗадание, значение свойства Caption — Добро пожаловать в наш отель! В таблице приведены значения свойств используемых элементов управления.
Значения свойств
Элемент |
Имя |
Свойство caption |
Другие свойства |
|
|
управления |
|
|
|
|
|
Надпись |
lblЗаголовок1 |
Карточка госте- |
Шрифт |
размером |
20 |
|
|
вых расходов |
пунктов, |
TextAlign |
= |
|
|
|
fmTextAlignCenter |
|
|
Надпись |
lblЗаголовок2 |
Отель «Лев и |
ForeColor Desktop в си- |
||
|
|
Кастрюля» |
ний цвет |
|
|
Командная |
cmdOK |
ОК |
Default = True, Cancel = |
||
кнопка |
|
|
True |
|
|
Для задания параметров шрифта используется свойство Font
(Шрифт).
28

Создайте процедуру под именем ПоказФормы, которая должна выводить на экран форму frmЗадание.
Создайте код, с помощью которого после щелчка на кнопке ОК в форме frmЗадание будет открываться форма Гостевые расходы.
Перейдите на Лист1 в рабочей книге Формы и назначьте процедуру ПоказФормы командной кнопке.
Приложения. Основные свойства элементов управления
Обращение к элементам управления происходит через их свойства и с помощью процедур обработки событий, написанных для того или иного отдельного элемента. Каждый элемент управления имеет свой набор свойств, которые определяют его вид и поведение.
Основные свойства элемента управления Надпись
Свойства |
Описание |
AutoSize |
Задает режим определения размеров отображаемой |
|
области элемента управления. Значение True уста- |
|
навливает режим автоматического вычисления раз- |
|
меров отображаемой области исходя из размеров |
|
текста в свойстве Caption. Значение False устанав- |
|
ливает режим фиксированного размера отображае- |
|
мой области, задаваемого значениями параметров |
|
Height (Высота) и Width (Ширина) |
Caption |
Содержит текст, отображаемый в элементе управ- |
|
ления |
Multiline |
Определяет допустимое количество строк. Значение |
|
True разрешает многострочный режим отображения |
|
текста в поле. Значение False допускает только од- |
29
|
нострочный режим |
Visible |
Определяет видимость элемента управления. Допу- |
|
стимые значения: True — элемент управления |
|
отображается на экране, False — элемент управле- |
|
ния не отображается |
Wordwrap |
Определяет возможность переноса текста на сле- |
|
дующую строку. Значение True разрешает режим |
|
автоматического переноса на следующую строку |
|
при необходимости. Значение False запрещает сво- |
|
рачивание текста в несколько строк |
|
Основные свойства элемента управления Поле |
|
|
|||
|
|
|
|
|
|
|
Свойства |
|
Описание |
|
|
|
|
AutoSize |
|
Задает режим определения размеров поля ввода эле- |
||||
|
|
мента управления. Значение True устанавливает ре- |
||||
|
|
жим автоматического вычисления размеров поля |
||||
|
|
ввода исходя из размеров текста в свойстве Text. Зна- |
||||
|
|
чение False устанавливает режим фиксированного |
||||
|
|
размера отображаемой области, задаваемого значени- |
||||
|
|
ями параметров Height (Высота) и Width (Ширина) |
|
|||
Enabled |
|
Определяет доступность (активность) данного эле- |
||||
|
|
мента управления. Допустимые значения: True — |
||||
|
|
элемент управления доступен пользователю (акти- |
||||
|
|
вен), False — элемент управления недоступен. В этом |
||||
|
|
случае он все равно будет видимым, но закрашен |
||||
|
|
серым цветом и недоступен пользователю |
|
|
||
MaxLength |
|
Задает максимально допустимое количество вводи- |
||||
|
|
мых в поле символов. Если значение равно 0, то |
||||
|
|
ограничений нет |
|
|
|
|
Multiline |
|
Определяет допустимое количество строк в поле вво- |
||||
|
|
да. Значение True разрешает многострочный режим |
||||
|
|
ввода текста в поле. Значение False допускает только |
||||
|
|
однострочный режим |
|
|
|
|
PasswordChar |
|
Определяет символ, который будет отображаться в |
||||
|
|
поле вместо введенных символов при вводе пароля |
|
|||
ScrollBars |
|
Определяет режим отображения в поле ввода полос |
||||
|
|
прокрутки. |
Возможные |
значения: |
0 |
— |
|
|
fmScrollBarsNone (не выводить полос прокрутки); 1 |
||||
|
|
— fmScrollBarsHorizontal (выводить горизонтальную |
||||
|
|
полосу прокрутки); 2 — f mScrollBarsVertical (выво- |
||||
|
|
дить вертикальную полосу прокрутки); 3 — |
||||
|
|
fmScrollBarsBoth (выводить горизонтальную и верти- |
||||
|
|
кальную полосы прокрутки) |
|
|
|
|
Text |
|
Содержит текст, введенный пользователем или отоб- |
||||
|
|
ражаемый в данном элементе управления |
|
|
||
Value |
|
Введенный в поле текст |
|
|
|
30