Использование макросов для обработки событий

Использование макросов для обработки событий

Наиболее часто макросы применяются для обработки событий. При этом макрос может функционировать и как самостоятельная программа, и в составе процедуры VBA (Visual Basic for Applications). Первый вариант мы рассмотрим в этом разделе, а второй станет предметом нашего внимания в главе 12.

Понятие события

Событие – это любое действие пользователя: щелчок кнопкой мыши, открытие формы и т. д. Событие может также инициироваться каким-либо оператором Visual Basic или самой системой Access. События связываются с формами, отчетами, разделами форм и отчетов, а также с элементами управления форм, в частности с полями. Откликом на событие может быть выполнение процедуры обработки событий на языке VBA или макроса.

Что такое обработка события? Например, давайте посмотрим, как выглядят свойства поля формы (пусть это будет форма Страны). Откроем ее в режиме конструктора (см. рис. 10.1).

Рис. 10.1

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

Рис. 10.2

Событие возникает для этого поля в следующих случаях:

• при обновлении поля (до или после операции);

• при открытии/закрытии поля;

• при активизации/дезактивизации поля, когда оно получает или теряет фокус;

• при использовании кнопок мыши (щелчок, двойной щелчок, движение курсора вверх или вниз);

• при использовании клавиатурных клавиш (нажатие клавиши, движение курсора вверх или вниз);

• при перемещении курсора.

Для другого элемента управления (например, для кнопки, текстового поля и т. д.) перечень событий, предусматриваемых в Access 2002, может быть несколько иным, но тоже достаточно длинным.

Последовательности событий

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

Порядок событий для элементов управления в формах События элемента управления возникают в форме при переводе фокуса на элемент управления, а также при изменении или обновлении данных в этом элементе.

Перевод фокуса на элемент управления

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

Вход • Получение фокуса.

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

Открытие (для формы) • Включение (для формы) • Текущая запись (для формы) Вход (для элемента управления) • Получение фокуса (для элемента управления).

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

Выход • Потеря фокуса.

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

Выход (для элемента управления) • Потеря фокуса (для элемента управления) • Выгрузка (для формы) • Отключение (для формы) • Закрытие (для формы).

Изменение и обновление данных в элементе управления

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

До обновления • После обновления.

События Выход и Потеря фокуса для изменяемого элемента управления возникают после событий До обновления и После обновления:

До обновления • После обновления • Выход • Потеря фокуса.

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

Клавиша вниз • Нажать клавишу • Изменение • Клавиша вверх.

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

Клавиша вниз • Нажать клавишу • Изменение • Клавиша вверх.

Порядок событий записи в форме

События записи возникают в форме в следующих случаях:

• при переводе фокуса на запись;

• при обновлении содержимого записи;

• при удалении существующей записи/записей;

• при создании новой записи.

Перемещение фокуса по записям и обновление содержимого записей

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

Текущая запись • До обновления • После обновления • Текущая запись.

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

До обновления (для формы) • После обновления (для формы) • Выход (для элемента управления) • Потеря фокуса (для элемента управления) • Текущая запись (для формы).

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

• открытие формы и изменение данных в элементе управления:

Текущая запись (для формы) • Вход (для элемента управления) • Получение фокуса (для элемента управления) • До обновления (для элемента управления) • После обновления (для элемента управления);

• перевод фокуса на другой элемент управления:

Вход (для элемента управления) • Потеря фокуса (для элемента управления 1) • Вход (для элемента управления 2) • Получение фокуса (для элемента управления 2);

перевод фокуса на другую запись:

До обновления (для формы) • После обновления (для формы) • Выход (для элемента управления 2) • Потеря фокуса (для элемента управления 2) • Текущая запись (для формы).

Удаление записей

Когда пользователь удаляет запись, в форме возникают следующие события:

Удаление • До подтверждения удаления • После подтверждения удаления.

Перед этим Microsoft Access обязательно выводит диалоговое окно, предлагая подтвердить удаление. Если пользователь отменяет событие Удаление, то события До подтверждения удаления и После подтверждения удаления не возникают и диалоговое окно не выводится.

Создание новой записи

Если пользователь переводит фокус на новую (пустую) запись в форме или создает новую запись, вводя символы с клавиатуры, то события возникают в следующем порядке:

Текущая запись (для формы) • Вход (для элемента управления) • Получение фокуса (для элемента управления) • До вставки (для формы) • После вставки (для формы).

Отметим, что события До обновления и После обновления для элементов управления в форме и для новой записи возникают после события До вставки, но до события После вставки.

Порядок событий клавиатуры и мыши

События клавиатуры возникают в имеющих фокус формах или в элементах управления формы при нажатии клавиш или при передаче команд клавиатуры.

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

События клавиатуры

Если фокус находится на элементе управления формы, а пользователь нажимает и отпускает клавишу или выполняет макрокоманду Команды клавиатуры, имитирующую нажатие клавиши, возникает следующая цепочка событий:

Клавиша вниз • Нажать клавишу • Клавиша вверх.

При нажатии или отпускании клавиши, а также при выполнении клавиатурной команды, соответствующей символу из набора ANSI, всегда возникают события Клавиша вниз, Нажать клавишу и Клавиша вверх. Если пользователь нажимает и удерживает клавишу ANSI (о режиме ANSI см. в главе 11), возникает иная последовательность событий:

Клавиша вниз • Нажать клавишу • Клавиша вверх.

Это продолжается до тех пор, пока пользователь не отпустит клавишу; тогда произойдет событие Клавиша вверх.

При нажатии и отпускании клавиши, которая не является клавишей ANSI, возникают события:

Клавиша вниз • Клавиша вверх.

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

Если при нажатии той или иной клавиши предусмотрено другое событие элемента управления, то это событие возникает после Нажать клавишу, но до Клавиша вверх. Например, если нажатие клавиши приводит к изменению текста в поле, то последовательность событий такова:

Клавиша вниз • Нажать клавишу • Изменение • Клавиша вверх.

Если нажатие клавиши вызывает перевод фокуса с одного элемента управления на другой, то событие Клавиша вниз возникает для первого элемента управления, а события Нажать клавишу и Клавиша вверх – для второго. Например, если пользователь изменяет данные в элементе управления и нажимает клавишу TAB для перехода к следующему элементу, то возникают следующие события:

• для первого элемента управления:

Клавиша вниз • До обновления • После обновления • Выход • Потеря фокуса;

• для второго элемента управления:

Вход • Получение фокуса • Нажать клавишу • Клавиша вверх.

События мыши

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

Кнопка вниз • Кнопка вверх • Щелкнуть по кнопке.

Если фокус находится на одном элементе управления, а пользователь устанавливает указатель мыши на другом и щелкает ее кнопкой, то возникают следующие события:

• для первого элемента управления:

Выход • Потеря фокуса;

• для второго элемента управления:

Вход • Получение фокуса • Кнопка вниз • Кнопка вверх • Щелкнуть по кнопке.

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

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

Кнопка вниз • Кнопка вверх • Щелкнуть по кнопке • Дважды щелкнуть по кнопке • Кнопка вверх.

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

Событие Перемещение указателя мыши для формы, раздела или элемента управления происходит при перемещении указателя соответственно по форме, разделу или элементу управления. Это событие не зависит от других событий мыши.

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

События отчета

При открытии отчета для печати или предварительного просмотра и последующем закрытии отчета (вариант – при переходе в другое окно Microsoft Access) события происходят в следующем порядке:

Открытие • Включение • Отключение • Закрытие.

При переходе из одного окна открытого отчета в другое возникает событие для первого отчета и Включение – для второго:

Отключение (для отчета 1) • Включение (для отчета 2).

Событие Отключение отчета происходит также при переходе из окна отчета в другое окно Microsoft Access. Однако Отключение не возникает при переходе в диалоговое окно, в окно формы, где установлено значение Да для свойства Всплывающее окно, или в окно другого приложения.

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

События разделов отчета

Данный текст является ознакомительным фрагментом.