Одно действие, например переход от одного элемента управления объекта к другому, может запускать несколько различных событий, которые происходят в определенной последовательности. Важно знать, когда и в каком порядке возникают события, так как это может повлиять на то, как и когда выполняются макросы или процедуры обработки событий. Например, если есть две процедуры обработки событий, которые должны выполняться в определенном порядке, нужно убедитесь в том, что в таком же порядке возникают события, связанные с ними.
В этом разделе...
- Порядок событий элементов управления в форме
- Порядок событий записей в формах
- Порядок событий формы и подчиненной формы
- Порядок событий клавиатуры и мыши
- Порядок событий отчета и разделов отчета
Порядок событий элементов управления в форме
В элементах управления формы происходят события, которые происходят при перемещении фокуса на элемент управления, а также при изменении и обновлении данных в элементе управления.
Примечание
Microsoft Office Access отображает имена событий в редакторе Visual Basic немного не так, как на странице свойств и в построителе макросов. Например, событие, которое на странице свойств и в построителе макросов называется On Got Focus, в редакторе Visual Basic называется GotFocus. В примерах ниже для имен событий используется формат Visual Basic для приложений (VBA).
Перемещение фокуса на элемент управления
При перемещении фокуса на элемент управления в форме (например, при открытии формы, содержащей один или несколько активных элементов управления, или при переходе на другой элемент управления в той же форме) возникают события Enter и GotFocus в следующем порядке:
Стрелка ввода
GotFocus
Когда вы открываете форму, события Enter и GotFocus возникают после событий, связанных с открытием формы (таких как Open, Activate и Current), в следующей последовательности:
Открытая
(форма) Стрелка активации (форма)
стрелка Текущая (форма)
ВВОД (CONTROL)
GotFocus (CONTROL)
При переводе фокуса с элемента управления в форме (например, при закрытии формы, в которой выводятся один или несколько активных элементов управления, или при переходе на другой элемент управления в той же форме) возникают события Exit и LostFocus в следующем порядке:
Стрелка выхода
: LostFocus
Когда вы закрываете форму, события Exit и LostFocus возникают перед событиями, связанными с закрытием формы, такими как Unload, Deactivate или Close:
Стрелка выхода (CONTROL)
Стрелка потерянного фокуса (CONTROL)
выгрузки (форма)
деактивации (форма
) Закрыть (форма)
Изменение и обновление данных в элементе управления
Когда вы вводите в элемент управления в форме новые данные или изменяете существующие, а после этого переводите фокус на другой элемент управления, возникают события BeforeUpdate и AfterUpdate в следующем порядке:
Стрелка BeforeUpdate
AfterUpdate
Для элемента управления с измененным значением после событий BeforeUpdate и AfterUpdate возникают события Exit и LostFocus:
Стрелка BeforeUpdate
AfterUpdateСтрелка выхода
LostFocus
Когда вы изменяете текст, содержащийся в текстовом поле или в поле со списком, возникает событие Change. Оно происходит при любом изменении содержимого элемента управления, причем до перехода фокуса на другой элемент управления или на другую запись (и, следовательно, до возникновения событий BeforeUpdate и AfterUpdate). Если курсор находится в поле, то при нажатии любой клавиши в текстовом поле или поле со списком возникают следующие события:
Стрелка вниз
Стрелка нажатия клавиш
Грязная
Стрелка изменения
вверх
Событие NotInList возникает, если ввести в поле со списком значение, которого нет в раскрывающемся списке, а затем попытаться переместить фокус на другой элемент управления или запись. Событие NotInList возникает после событий клавиатуры и события Change для поля со списком, но перед событиями других элементов управления или формы. Если свойство LimitToList поля со списком имеет значение Yes, событие Error для формы возникает сразу после события NotInList :
Стрелка вниз
Стрелка нажатия клавиши
Грязная
Изменить
Стрелка вверх
Стрелка NotInList
Порядок событий записей в формах
События происходят для записей в формах при перемещении фокуса на другую запись, обновлении данных в записи, удалении одной или нескольких записей либо создании новой записи.
Перемещение фокуса между записями и обновление содержимого записей
При переводе фокуса на существующую запись в форме, вводе новых или изменении существующих данных в записи и при переходе на другую запись возникает такая последовательность событий:
Текущая
(форма) Стрелка BeforeUpdate (форма)
Стрелка AfterUpdate (форма)
Текущая (форма)
При выходе из измененной записи, но до входа в новую возникают события Exit и LostFocus для последнего элемента управления, имевшего фокус. Эти события возникают после событий формы BeforeUpdate и AfterUpdate:
Стрелка BeforeUpdate (форма)
Стрелка AfterUpdate (форма)
Стрелка выхода (CONTROL)
Стрелка потерянного фокуса (CONTROL)
(форма)
При переводе фокуса с одного элемента управления в форме на другой возникают события каждого элемента управления. Например, могут происходить описанные ниже последовательности.
- Открытие формы и изменение данных в элементе управления:
Текущая
(форма) Стрелка ВВОД (контроль)
Стрелка GotFocus (контроль)
BeforeUpdate (контроль)
AfterUpdate (элемент управления) - Перевод фокуса на другой элемент управления:
Стрелка выхода (control1
) LostFocus (control1)
ВВОД (control2)
GotFocus (control2) - Перевод фокуса на другую запись:
Стрелка BeforeUpdate (форма)
Стрелка AfterUpdate (форма)
выхода (control2)
Стрелка потерянного фокуса (control2)
(форма)
Удаление записей
Когда вы удаляете запись, в форме возникают следующие события, а Microsoft Office Access выводит диалоговое окно с приглашением подтвердить удаление:
Стрелка удаления
Стрелка BeforeDelConfirm
AfterDelConfirm
Если отменить событие Delete, то события BeforeDelConfirm и AfterDelConfirm не возникнут, а диалоговое окно не появится.
Создание записи
При переводе фокуса на новую (пустую) запись в форме и создании записи путем ввода данных с клавиатуры происходят следующие события:
Текущая
(форма) Стрелка ВВОД (CONTROL)
Стрелка GotFocus (CONTROL)
beforeInsert (форма)
(форма)
Событие BeforeInsert (форма) срабатывает, как только вы начинаете вводить текст в элементе управления. Событие AfterInsert (форма) запускается после выхода из записи.
События BeforeUpdate и AfterUpdate для элементов управления в форме и для новой записи возникают после события BeforeInsert, но до события AfterInsert.
Порядок событий формы и подчиненной формы
События формы возникают при открытии и закрытии форм, при переходах между формами и при работе с данными в форме или подчиненной форме.
Открытие и закрытие формы
При открытии формы события возникают в следующем порядке:
Открытая
Стрелка загрузки
изменения размера
Активная
Текущая
Если в форме нет активных элементов управления, после события Activate, но до события Current возникает событие GotFocus для формы.
При закрытии формы происходят следующие события:
Стрелка выгрузки
деактивацииЗакрыть
Если в форме нет активных элементов управления, событие LostFocus происходит для формы после события Unload , но перед событием Deactivation .
Перемещение между формами
При переходе из одной открытой формы в другую возникает событие Deactivate для первой формы и событие Activate для второй формы:
Стрелка деактивации (форма1)
Активировать (форма2)
Событие формы Deactivate возникает также при переключении с вкладки формы на вкладку другого объекта Access. Однако событие Deactivate не возникает при переходе в диалоговое окно, в окно формы, свойство PopUp которой имеет значение Yes, или в окно другой программы.
Примечание
Событие Open не возникает при переводе фокуса в уже открытую форму даже в том случае, если фокус переведен в эту форму посредством макрокоманды OpenForm.
Работа с данными в форме
При перемещении по записям формы и изменении данных возникают события формы и события элементов управления. Например, при открытии формы возникает следующая цепочка событий:
Стрелка открытия (
форма) Стрелка загрузки (форма)
изменения размера (форма)
стрелка Стрелка активации (
форма)
(форма) Стрелка ВВОД (контроль) GotFocus (контроль) 
Аналогично при закрытии формы возникают следующие события:
Стрелка выхода (CONTROL)
Стрелка потерянного фокуса (CONTROL)
выгрузки (форма)
деактивации (форма
) Закрыть (форма)
При изменении данных в элементе управления события BeforeUpdate и AfterUpdate как для элемента управления, так и для формы возникают до события Exit.
Работа с подчиненными формами
При открытии формы, содержащей подчиненную форму, подчиненная форма и ее записи загружаются перед основной формой. Таким образом, события подчиненной формы и ее элементов управления (таких как Open, Current, ВВОД и GotFocus) предшествуют событиям для формы. Однако событие активации не происходит для подчиненных форм. Поэтому при открытии главной формы запускается событие "Активировать " только для главной формы.
Аналогично, при закрытии формы, содержащей подчиненную форму, подчиненная форма и ее записи выгружаются после формы. Событие деактивации не происходит для подчиненных форм. Таким образом, при закрытии главной формы запускается событие деактивации только для главной формы. События для элементов управления, формы и подчиненной формы происходят в следующем порядке.
- События элементов управления в подчиненной форме, такие как Exit и LostFocus.
- События элементов управления в главной форме (включая элемент управления подчиненной формы).
- События формы, такие как Deactivate и Close.
- События подчиненной формы.
Примечание
Так как события подчиненной формы возникают после закрытия главной формы, некоторые события, такие как отмена закрытия главной формы в результате события в подчиненной форме, произойти не могут. Проверки условий такого типа следует связывать с событиями в главной форме.
Порядок событий клавиатуры и мыши
События клавиатуры для форм и элементов управления возникают при нажатии или отправке нажатий клавиш, когда фокус находится на форме или элементе управления. События мыши возникают для форм, разделов форм и элементов управления при нажатии кнопок мыши, если в этот момент указатель находится в форме, разделе формы или элементе управления. События мыши также возникают при перемещении указателя в форме, разделе или элементе управления.
События клавиатуры
При нажатии и отпускании клавиши, когда фокус находится на элементе управления формы (или при использовании действия или инструкции SendKeys для отправки нажатия клавиши), возникает следующая последовательность событий:
Клавиша со
вниз Клавиша со
вверх
При нажатии и отпускании клавиши или при нажатии клавиш в наборе символов ANSI происходят события KeyDown, KeyPress и KeyUp . Если нажать и удерживать клавишу ANSI, события KeyDown и KeyPress чередуются несколько раз (KeyDown, KeyPress, KeyDown, KeyPress и т. д.), пока вы не отпустите клавишу; затем происходит событие KeyUp .
При нажатии и отпускании клавиши, которая не является клавишей ANSI, возникают события KeyDown и KeyUp. Если вы нажимаете и удерживаете клавишу, не являющуюся клавишей ANSI, то до отпускания клавиши возникает и повторяется событие KeyDown; при отпускании клавиши возникает событие KeyUp.
Если нажатие клавиши вызывает другое событие элемента управления, то оно возникает после события KeyPress, но до события KeyUp. Например, если нажатие клавиши приводит к изменению текста в текстовом поле, то событие Change возникает в следующей цепочке событий:
Стрелка вниз
при нажатии клавиш
изменения
вверх
Если нажатие клавиши вызывает перевод фокуса из одного элемента управления на другой, то для первого элемента управления возникает событие KeyDown, а для второго происходят события KeyPress и KeyUp. Например, если пользователь изменяет данные в элементе управления и нажимает клавишу TAB для перехода на следующий элемент управления, то возникают следующие события:
- Первый элемент управления:
Стрелка вниз
Стрелка дообновления
послеобновления
Стрелка
выхода LostFocus - Второй элемент управления:
Стрелка ВВОД
, Стрелка GotFocus
, клавиша СтрелкаНажатие
, KeyUp
События мыши
Если вы нажимаете и отпускаете кнопку мыши, когда указатель установлен на элементе управления в форме, возникает следующая цепочка событий элемента управления:
Стрелка мыши вниз
мыши вверх
Щелчок
Если фокус находится на элементе управления, а вы щелкаете другой элемент управления, чтобы переместить на него фокус, возникают следующие события:
- Первый элемент управления:
Стрелка выхода
: LostFocus - Второй элемент управления:
Стрелка ввода
, Стрелка GotFocus
,
мышиВниз,
мыши вверх, Щелчок
Если вы переходите на другую запись и щелкаете элемент управления, то событие формы Current возникает до события Enter элемента управления.
Двойной щелчок элемента управления приводит к возникновению двух событий: Click и DblClick. Например, если дважды щелкнуть элемент управления, не являющийся кнопкой, то возникает следующая цепочка событий элемента управления:
Стрелка мышиСтрелка вниз
Стрелка мыши вверх
Стрелка щелчка
DblClick
вверх
Если дважды щелкнуть кнопку, возникает предыдущая последовательность событий, за которой следует второе событие Click.
Событие формы, раздела или элемента управления MouseMove возникает при перемещении указателя по форме, разделу или элементу управления. Это событие не зависит от других событий мыши.
Порядок событий отчета и разделов отчета
События отчета и разделов отчета возникают при открытии отчета для печати или предварительного просмотра, а также при закрытии отчета.
События отчета
При открытии отчета для печати или предварительного просмотра и его последующем закрытии или переходе на другую вкладку Access события возникают в следующем порядке:
Открыть
Загрузить
Активировать
Закрыть
Деактивировать
При переходе между двумя открытыми отчетами возникает событие Deactivate для первого отчета и событие Activate для второго:
Деактивировать (отчет1)
Активировать (отчет2)
Событие отчета Deactivate возникает также при переключении с отчета на вкладку другого объекта Access. Однако событие Deactivate не возникает при переходе в диалоговое окно, в окно формы, свойство PopUp которой имеет значение Yes, или в окно другой программы.
При открытии отчета, созданного на основе запроса, Access создает для отчета событие Open до выполнения базового запроса. Это делает возможным ввод в отчет условий с помощью макроса или процедуры обработки событий, которые запускаются в ответ на событие Open. Например, макрос или процедура обработки событий позволяют открыть настраиваемое диалоговое окно, через которое пользователь вводит в отчет условия.
События разделов отчета
При печати или предварительном просмотре отчета события разделов отчета Format и Print возникают после событий отчета Open и Activate и до событий отчета Close и Deactivate:
Открытие (отчет)
Стрелка загрузки (отчет
) Активация (отчет)
Стрелка формата (раздел отчета)
Печать (раздел отчета)
Закрыть (отчет)
Деактивировать (отчет)
Безопасность Для включения пользовательской фильтрации отчетов можно использовать представление отчетов. В отличие от предварительного просмотра, события форматирования и печати в любом из разделов не происходят в представлении отчета. Это также относится к результатам функции VBA и определяемым пользователем процедурам, отображаемым в элементах управления (например, подписях меток, состоянии отображения, условном форматировании, изменении размера элементов управления и т. д.) в этих событиях. Поэтому не используйте код в этом событии для форматирования, скрытия или печати конфиденциальных данных, которые могут стать раскрытыми. Рекомендуется выполнить предварительную фильтрацию данных или отключить предварительный просмотр отчета, задав для свойства AllowReportView значение "Нет".
Кроме того, во время форматирования отчета или после завершения форматирования, но до возникновения события Print могут возникнуть следующие события:
- Событие Retreat возникает при возвращении в предыдущий раздел во время форматирования.
- Событие NoData возникает при отсутствии выводящихся в отчете записей.
- Событие Page возникает после завершения форматирования, но до начала печати. Это событие можно использовать для настройки вида отчета при печати.