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

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

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

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

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

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

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

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

Подобно любым другим кнопкам, для того чтобы отвечать на щелчки на них, кнопки Закрыть и Отмена требуют создания процедур обработки события 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).

Можно также с помощью этого программного кода конвертировать введенные данные в данные подходящего вида, например сделать все буквы прописными.

Рис. 10.27. Для проверки введенных данных в текстовом поле и отображения этого сообщения об ошибке использовалась процедура обработки события Change

Проверка значений элементов управления требует использования операторов

If. . .Then и Select Case. В следующем простом примере проверяется на допустимость значение элемента управления кнопками прокрутки:

Private Sub spnVolumeControl_Change()

If spnVolumeControl.Value = 13 Then

MsgBox "13 не является допустимым значением."

End If

End Sub

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

Момент проверки данных

Используемая процедура

При нажатии любой клавиши

Процедура об работки события Key Press для элемента управления (для выяснения информации о нажатии отдельной клавиши)

При любом изменении значения элемента управления

Процедура обработки события Change (для оценки значения)

По окончании работы пользователя с элементом управления, непосредственно перед переходом к другому

Процедура обработки события Be Fore Update (позволяет отменить обновление данных и вернуть пользователя к текущему элементу управления)

При закрытии формы пользователем

Процедура обработки события click для кнопок ОК или Закрыть в форме

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

* Насколько быстро должен выполняться программный код проверки?

* В какой момент нужно информировать об ошибке пользователя- в момент появления неправильного значения или уже после того, как пользователь закончит формирование вводимых данных?

* Основывается ли проверка на значениях, полученных от нескольких элементов управления?

Оглавление книги


Генерация: 1.316. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз