Когда не нужно создавать процедур обработки события Click

Когда не нужно создавать процедур обработки события Click

Большинство элементов управления VBA распознают событие Click. Но, за исключением кнопок, обычно нет необходимости и даже неразумно создавать процедуру обработки события Click, даже если нужно, чтобы объект отвечал на щелчки кнопки мыши. Причина в том, что эти элементы управления отвечают на щелчки автоматически и обычно так, как требуется.

Предположим, вы поместили в форму VBA несколько кнопок. После запуска формы на выполнение щелчок на кнопке выделяет эту кнопку и для этого не требуется никакого программирования. Точно так же VBA автоматически обрабатывает щелчки на кнопках выключателей и переключателей. VBA знает, что щелчок должен изменить состояние элемента управления на противоположное, если для элемента управления предусмотрено только два состояния (состояние включен/выключен- для выключателя, отмечен/не отмечен- для флажка и т.д.). А после щелчка в поле текста этот элемент управления автоматически перемещает курсор ввода в то место, где вы щелкнули.

Но VBA не может передать информацию о состоянии элемента управления вашей программе- это придется делать вам, создавая программный кол. Что введет пользователь в поле текста? Какой флажок отметит и для какого снимет отметку? Какую из кнопок переключателей выберет? Ваша программа не узнает об этом до тех пор, пока вы не создадите программный код, позволяющий выяснить и обработать эту информацию.

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

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

Для этого нужно поместить программный код соответствующих действий в процедуру обработки события Click формы:

Private Sub UserForm_Click( )

...(программный код, инициируемый событием)

End Sub

Обратите внимание на то, что имена всех процедур обработки событий формы начинаются с UserForm, независимо оттого, какое имя вы назначили самой форме. Если вы действительно собираетесь создавать процедуру обработки события Click формы, то должны четко представлять себе, что VBA выполнит эту процедуру после щелчка пользователя только в той части формы, которая не закрыта каким-нибудь элементом управления. Другие процедуры обработки событий, связанных с манипуляциями мышью, работают аналогично.

Для элементов управления типа полос прокрутки, кнопок прокрутки переключателей и выключателей главным событием является событие Change. Эти элементы управления реагируют на щелчки мыши и нажатия клавиш, но реагируют автоматически. VBA вместе с Windows делают всю "грязную" работу по изменению внешнего вида элемента управления и изменению его установок в соответствии с тем, какие клавиши или какие кнопки мыши были нажаты.

Возможно, вы захотите, чтобы программа отвечала не на сами нажатия, а на те изменения, к которым они привели. В таком случае вы должны создать программный код для события Change. Событие Change происходит, когда изменяется значение элемента управления (т.е. когда изменяется значение свойства Value). При этом не имеет значения, почему произошло изменение значения- после щелчка кнопки мыши или печатания либо потому, что какая-то процедура в программе в одном из своих операторов манипулировала значением свойства Value этого элемента управления.

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

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

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

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