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