Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

информатика_2_3

.pdf
Скачиваний:
45
Добавлен:
12.03.2015
Размер:
1.19 Mб
Скачать

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