Чтение онлайн

ЖАНРЫ

VBA для чайников

Каммингс Стив

Шрифт:

Не исключено также, что вы захотите, чтобы программа отвечала на изменение значения некоторого элемента управления по окончании работы с ним пользователя. В таком случае нужно создать программный код для события After Update, которое возникает при передаче фокуса ввода другому элементу управления.

С помощью процедуры обработки события можно сделать гораздо больше, чем просто отобразить новое значение элемента управления. Например: проверить, удовлетворяет ли это значение заданным критериям; сначала выполнить вычисления, основанные на этом значении, а затем определенные действия, в зависимости от результатов вычисления; использовать значение элемента управления

для того, чтобы установить другое значение, например для громкости звука динамика вашего компьютера.

Используйте события Keypress, KeyDown и KeyUp, чтобы отвечать на нажатия клавиш пользователем. Событие Keypress удобно использовать для распознавания клавиш с обычными "печатаемыми" символами (буквы, числа, знаки пунктуации), когда нужно обработать информацию, вводимую в текстовое поле или в поле со списком. С помощью этого события распознаются также многие из комбинаций типа <Ог1+клавиша>, а также клавиша <Backspace>. Немного позже я покажу, как проверить или изменить напечатанный символ с помощью процедуры обработки события KeyPress.

События KeyDown и KeyUp, напротив, распознают практически любую посылаемую им комбинацию клавиш, включая выкрутасы типа <Alt+Shift+CtrI+F9>. С этими событиями работать труднее, чем с KeyPress, но зато они позволяют использовать более широкий набор сочетаний клавиш. Например, можно создать процедуру обработки события KeyDown, которая позволяет с помощью комбинаций <Ctrl+<-> и <Ctrl+->> соответственно уменьшать или увеличивать значение полосы прокрутки, например, на 10.

Основные приемы программирования форм

Теперь, уяснив, как работают процедуры обработки событий, вы сможете применить свои знания при создании диалоговых окон, которые будут работать так, как хотите вы, и так, как ожидают пользователи. В этом разделе мы обсудим целый ряд сценариев, применяемых при создании диалоговых окон.

Большинство диалоговых окон имеют, как минимум, одну кнопку главной команды и кнопку, убирающую диалоговое окно с экрана. В зависимости от того, что делает диалоговое окно, на этой кнопке обычно написано либо Закрыть, либо Отмена, но вполне допустимы и другие надписи - Выход, Готово, Пропустить, Закончить и т.п. Такая кнопка потребуется любой вашей форме.

По общепринятому соглашению кнопки Закрыть и Отмена просто прячут или выгружают форму, и ничего больше. Следующие рекомендации помогут определить, какая из этих кнопок лучше подойдет для вашей формы.

* Используйте кнопку Закрыть для форм, которые только отображают информацию или выполняют свою задачу немедленно, без изменения установок программы или модификации переменных, которые будут использоваться в программе позже.

* Используйте кнопку Отмена для форм, которые изменяют переменные или установки программы. После щелчка пользователя на кнопке Отмена диалоговое окно должно закрыться без записи таких изменений - все должно остаться так, как было до открытия диалогового окна. Такая форма должна также иметь кнопку ОК, щелчок на которой подтверждает изменения и вносит их.

Подобно любым другим кнопкам, для того чтобы отвечать на щелчки на них, кнопки Закрыть и Отмена требуют создания процедур обработки события Click. В большинстве случаев эти процедуры содержат всего один оператор, как в следующих двух примерах:

Private Sub cmdClose_Click

Hide здесь подразумевается ссылка на форму

End Sut

Private Sub cmdCancel_Click

Unload frmOptions

End Sub

Для

любой кнопки можно использовать метод Hide или оператор Unload. Разница между этими двумя способами закрытия формы обсуждалась в разделах "Как скрыть видимую форму" и "Удаление формы из памяти".

Конечно, процедуры, связанные с кнопками Закрыть и Отмена, могут до закрытия формы сделать что-то еще, например отобразить диалоговое окно, в котором пользователю предлагают подтвердить (или не подтвердить) желание закрыть форму.

Private Sub cmdClose_Cl ick

Message = "Вы действительно хотите закрыть " _

& "диалоговое окно и отменить все " _

& "внесенные вами изменения?"

If MsgBox(Message, vbYesNo) = vbYes Then

Hide ' закрыть, если пользователь ответил Да

End If ' иначе не делать ничего

End Sub

Не забудьте связать кнопку Закрыть и Отмена с клавишей <Esc>. Пользователи привыкли нажимать <Esc> для выхода из диалоговых окон, и вы не должны обманывать их ожиданий. Тем более, что в данном случае не придется создавать процедуру обработки события KeyPress-- просто установите для свойства Cancel значение True в окне свойств.

Представьте себе типичное диалоговое окно. Вы ожидаете, что после щелчка на кнопке ОК программа воспримет введенные в окно данные как окончательные и соответствующим образом изменит внешний вид, поведение или данные программы. После этого форма должна удалить себя с экрана.

В соответствии с этими ожиданиями вы должны создать и процедуру обработки события Click для кнопки ОК. Все, что должен сделать в данном случае программный код,- это передать значения от элементов управления переменным программы или использовать значения элементов управления в условных выражениях. Последняя строка процедуры должна содержать либо метод Hide, либо оператор Unload. В следующих примерах txtCName и txtCAddress представляют текстовые поля. Первых два оператора передают их значения соответствующим переменным программы. Затем программа проверяет состояние выключателя tglSend и, если он включен, выполняет процедуру SendBillToCustomer.

Наконец, она прячет форму:

Private Sub cmdOK_Click

strCustomerName = txtCName.Value

strCustomerAddress = txtCAddress.Value

' проверка состояния выключателя

If tglSend.Value = True Then

SendBillToCustomer

End If

Hide

End Sub

Чаще всего в процедурах обработки событий приходится заниматься проверкой данных, введенных пользователем с помощью элементов управления, Обычно программа предполагает ввод данных определенного вида. Однако пользователь может ввести любой текст в текстовое поле или поле со списком и выбрать почти любое число с помощью кнопок прокрутки.

В таком случае в процедуру соответствующего элемента управления крайне желательно добавить программный код, проверяющий правильность ввода. Этот программный код должен введенные пользователем данные оценить с точки зрения удовлетворения заданным критериям. Если критерии удовлетворены, программный код сохраняет введенные значения или передает их другой части программы. В противном случае можно отобразить сообщение или как-то по-другому информировать пользователя о том, что возникла проблема (рис. 10.27).

Поделиться с друзьями: