Едно действие, като например преместване от една контрола в обект към друга, може да задейства няколко различни събития, които възникват в определена последователност. Важно е да знаете кога и в какъв ред възникват събитията, защото това може да повлияе на начина и времето на изпълнение на вашите макроси или процедури за обработка на събития. Ако например има две процедури за обработка на събития, които трябва да се изпълнят в определен ред, ще искате да се уверите, че събитията, с които са свързани, възникват в същия ред.
В тази статия
Ред на събитията за контроли във формуляри
За контролите във формулярите възникват събития, когато преместите фокуса върху контролата и когато промените и актуализирате данни в контролата.
Забележка: Microsoft Office Access показва малко по-различно имената на събитията в редактора на Visual Basic, отколкото в листа със свойства и конструктора на макроси. Например събитието, наречено При получаване на фокус в листа със свойства на формуляра и в конструктора на макроси, се нарича GotFocus в редактора на Visual Basic. В примерите в тази статия се използва форматът на Visual Basic for Applications (VBA) за имената на събитията.
Преместване на фокуса върху контрола
Когато преместите фокуса върху контрола във формуляр (например като отворите формуляр, който съдържа една или повече активни контроли, или като преместите фокуса върху друга контрола в същия формуляр), събитията Enter и GotFocus възникват в следния ред:
Enter GotFocus
Когато отворите формуляр, събитията Enter и GotFocus възникват след събитията, свързани с отварянето на формуляра (като например Open, Activate и Current), както следва:
Open (формуляр) Activate (формуляр) Current (формуляр) Enter (контрола) GotFocus (контрола)
Когато фокусът напусне контрола във формуляр (например когато затворите формуляр, който съдържа една или повече активни контроли, или когато се преместите към друга контрола в същия формуляр), събитията Exit и LostFocus възникват в следния ред:
Изход от LostFocus
Когато затворите формуляр, събитията Exit и LostFocus възникват преди събитията, свързани със затварянето на формуляра (като например Unload, Deactivate и Close), както следва:
Exit (контрола) LostFocus (контрола) Unload (формуляр) Deactivate (формуляр) Close (формуляр)
Промяна и актуализиране на данни в контрола
Когато въведете или промените данни в контрола във формуляр и след това преместите фокуса върху друга контрола, ще възникнат събитията BeforeUpdate и AfterUpdate:
BeforeUpdate Afte rUpdate
Събитията Exit и LostFocus за контролата, чиято стойност се променя, възникват след събитията BeforeUpdate и AfterUpdate:
BeforeUpdate AfterUpdate , LostFocus
Когато промените текста в текстово поле или в раздела за текстово поле на разгъващ се списък, ще възникне събитието Change. Това събитие възниква винаги когато се променя съдържанието на контролата, но преди да преместите фокуса върху друга контрола или запис (и следователно преди да възникнат събитията BeforeUpdate и AfterUpdate). За всеки клавиш, който натиснете в текстово поле или в раздела за текстово поле на разгъващ се списък, възниква следната последователност от събития:
KeyDown KeyPress Dirty Change KeyUp
Събитието NotInList възниква, когато въведете стойност в разгъващ се списък, която не може да бъде намерена в него, и след това се опитате да преместите фокуса върху друга контрола или запис. Събитието NotInList възниква след събитията за клавиатурата и събитията Change за разгъващия се списък, но преди събитията за всяка друга контрола или за формуляра. Ако свойството LimitToList на разгъващия се списък е с настройка Да, събитието Error за формуляра ще възникне незабавно след събитието NotInList:
KeyDown KeyPress dirty error change KeyUp NotInList 0
Ред на събитията за записи във формуляри
За записите във формулярите възникват събития, когато преместите фокуса върху различен запис, актуализирате данните в запис, изтриете съществуващ запис или записи или създадете нов запис.
Преместване на фокуса върху записи и актуализиране на данните в записи
Когато преместите фокуса върху съществуващ запис във формуляр, въведете или промените данните в записа и след това преместите фокуса върху друг запис, за формуляра ще възникне следната последователност от събития:
Current (формуляр) BeforeUpdate (формуляр) AfterUpdate (формуляр) Current (формуляр)
Когато излезете от записа, чиито данни сте променили, но преди да влезете в следващия запис, събитията Exit и LostFocus ще възникнат за контролата, в която се намира фокусът. Тези събития възникват след събитията BeforeUpdate и AfterUpdate за формуляра, както следва:
BeforeUpdate (формуляр) AfterUpdate (формуляр) Exit (контрола) LostFocus (контрола) Current (формуляр)
Докато премествате фокуса между контролите във формуляр, ще възникват събития за всяка контрола. Например посочените по-долу последователности от събития възникват, когато направите следното:
-
Отваряне на формуляр и промяна на данните в контрола:
Current (формуляр) Enter (контрола) GotFocus (контрола) BeforeUpdate (контрола) AfterUpdate (контрола)
-
Преместване на фокуса върху друга контрола:
Exit (контрола1) LostFocus (контрола1) Enter (контрола2) GotFocus (контрола2)
-
Преместване на фокуса върху друг запис:
BeforeUpdate (формуляр) AfterUpdate (формуляр) Exit (контрола2) LostFocus (контрола2) Current (формуляр)
Изтриване на записи
Когато изтриете запис, посочените по-долу събития ще възникнат за формуляра и Microsoft Office Access ще покаже диалогов прозорец за потвърждение на изтриването:
Изтриване на BeforeDelConfirm AfterDelConfirm
Ако отмените събитието Delete, събитията BeforeDelConfirm и AfterDelConfirm няма да възникнат и диалоговият прозорец няма да се покаже.
Създаване на нов запис
Когато преместите фокуса върху нов (празен) запис във формуляр и след това създадете нов запис, като въведете данни в контрола, ще възникне следната последователност от събития:
Current (формуляр) Enter (контрола) GotFocus (контрола) BeforeInsert (формуляр) AfterInsert (формуляр)
Събитието BeforeInsert (формуляр) се активира веднага щом започнете да въвеждате в контролата. Събитието AfterInsert (формуляр) се активира, след като излезете от записа.
Събитията BeforeUpdate и AfterUpdate за контролата във формуляра и за новия запис възникват след събитието BeforeInsert и преди събитието AfterInsert.
Ред на събитията за формуляри и подформуляри
За формулярите възникват събития, когато отворите или затворите формуляр, когато се придвижите между формуляри или когато работите с данните във формуляр или подформуляр.
Отваряне и затваряне на формуляр
Когато отворите формуляр, за формуляра ще възникне следната последователност от събития:
Отваряне зареждане преоразмеряване Активиране текуща версия
Ако няма активни контроли във формуляра, събитието GotFocus за формуляра ще възникне след събитието Activate, но преди събитието Current.
Когато затворите формуляр, за формуляра ще възникне следната последователност от събития:
Изключване дезактивиране затваряне
Ако няма активни контроли във формуляра, събитието LostFocus за формуляра ще възникне след събитието Unload, но преди събитието Deactivate.
Придвижване между формуляри
Когато превключите между два отворени формуляра, събитието Deactivate възниква за първия формуляр, а събитието Activate възниква за втория формуляр:
Deactivate (формуляр1) Activate (формуляр2)
Събитието Deactivate за формуляр възниква и когато превключите от формуляра към друг раздел на обект в Access. Събитието Deactivate обаче не възниква, когато превключите към диалогов прозорец, към формуляр, за който свойството PopUp е с настройка Да, или към прозорец в друга програма.
Забележка: Събитието Open не възниква, ако преместите фокуса върху формуляр, който вече е отворен, дори ако сте преместили фокуса върху този формуляр чрез изпълнение на действие OpenForm.
Работа с данни във формуляр
Събития за формуляра и контролите възникват, докато се придвижвате между записите във формуляра и променяте данните. Например, когато отворите формуляр за първи път, ще възникне следната последователност от събития:
Open (формуляр) Load (формуляр) Resize (формуляр) Activate (формуляр) Current (формуляр) Enter (контрола)0 GotFocus (контрола)
По подобен начин, когато затворите формуляр, ще възникне следната последователност от събития:
Exit (контрола) LostFocus (контрола) Unload (формуляр) Deactivate (формуляр) Close (формуляр)
Ако сте променили данни в контрола, събитията BeforeUpdate и AfterUpdate както за контролата, така и за формуляра ще възникнат преди събитието Exit за контролата.
Работа с подформуляри
Когато отворите формуляр, съдържащ подформуляр, подформулярът и неговите записи се зареждат преди главния формуляр. Затова събитията за подформуляра и неговите контроли (като например Open, Current, Enter и GotFocus) възникват преди събитията за формуляра. Събитието Activate обаче не възниква за подформуляри. Следователно отварянето на главен формуляр задейства събитие Activate само за главния формуляр.
По подобен начин, когато затворите формуляр, съдържащ подформуляр, подформулярът и неговите записи се освобождават след формуляра. Събитието Deactivate не възниква за подформуляри. Следователно затварянето на главен формуляр задейства събитие Deactivate само за главния формуляр. Събитията за контролите, формуляра и подформуляра възникват в следния ред:
-
Събития за контролите на подформуляра (като например Exit и LostFocus)
-
Събития за контролите на формуляра (включително контролите на подформуляра)
-
Събития за формуляра (като например Deactivate и Close)
-
Събития за подформуляра
Забележка: Тъй като събитията за подформуляр възникват след затварянето на главния формуляр, някои събития, като например отмяна на затварянето на главния формуляр от събитие в подформуляра, няма да възникнат. Може да се наложи да преместите тези типове тестове за проверка към събитие в главния формуляр.
Ред на събитията за натискания на клавиши и щраквания с мишката
За формулярите и контролите възникват събития за клавиатурата, когато натиснете клавиши или изпратите команди за натиснати клавиши, докато фокусът се намира във формуляра или контролата. За формулярите, разделите на формулярите и контролите във формулярите възникват събития за мишката, когато натиснете бутоните на мишката, докато показалецът се намира върху формуляр, раздел или контрола. Събития за мишката възникват и когато преместите показалеца върху формуляр, раздел или контрола.
Събития за клавиатурата
Когато натиснете и освободите клавиш, докато фокусът се намира върху контрола във формуляр, (или използвате действието SendKeys или команда за изпращане на натиснат клавиш), ще възникне следната последователност от събития:
KeyDown KeyPress KeyUp
Когато натиснете и освободите клавиш или изпратите натискане на клавиш в набор от знаци АNSI, всички събития KeyDown, KeyPress и KeyUp възникват. Ако натиснете и задържите натиснат ANSI клавиш, събитията KeyDown и KeyPress се редуват многократно (KeyDown, KeyPress, KeyDown, KeyPress и т.н.), докато не освободите клавиша; след това ще възникне събитието KeyUp .
Ако натиснете и освободите не-ANSI клавиш, ще възникнат събитията KeyDown и KeyUp. Ако натиснете и задържите не-ANSI клавиш, събитието KeyDown ще възниква многократно, докато не освободите клавиша, след което ще възникне събитието KeyUp.
Ако натискането на клавиш задейства друго събитие за контрола, това събитие ще възникне след събитието KeyPress, но преди събитието KeyUp. Ако например натискането на клавиш променя текста в текстово поле, което задейства събитие Change, ще възникне следната последователност от събития:
KeyDown KeyPress Change KeyUp
Ако натискането на клавиш предизвиква преместване на фокуса от една контрола към друга, събитието KeyDown ще възникне за първата контрола, докато събитията KeyPress и KeyUp ще възникнат за втората контрола. Ако например промените данни в контрола и след това натиснете клавиша за табулация, за да се придвижите към следващата контрола, ще възникне следната последователност от събития:
-
Първа контрола:
KeyDown BeforeUpdate AfterUpdate Exit LostFocus
-
Втора контрола:
Enter GotFocus KeyPress KeyUp
Събития за мишката
Когато натиснете и отпуснете бутон на мишката, докато показалецът се намира върху контрола във формуляр, за контролата ще възникне следната последователност от събития:
MouseDown MouseUp Click
Ако фокусът се намира в контрола и щракнете върху друга контрола, за да преместите фокуса в нея, ще възникне следната последователност от събития:
-
Първа контрола:
Изход от LostFocus
-
Втора контрола:
Въведете GotFocus MouseDown MouseUp щракване
Ако се придвижите към друг запис и след това щракнете върху контрола, събитието Current за формуляра също ще възникне преди събитието Enter за контролата.
Двукратното щракване върху контрола води до възникването на събитията Click и DblClick. Например, когато щракнете двукратно върху контрола, различна от команден бутон, за контролата ще възникне следната последователност от събития:
MouseUp #x2 Щракнете DblClick MouseUp
Когато щракнете двукратно върху команден бутон, ще възникне предходната последователност от събития, последвана от второ събитие Click.
Събитието MouseMove за формуляр, раздел или контрола възниква, когато преместите показалеца на мишката над формуляра, раздела или контролата. Това събитие е независимо от другите събития за мишката.
Ред на събитията за отчети и раздели на отчети
За отчетите и разделите на отчетите възникват събития, когато отворите отчет, за да го отпечатате или прегледате, или когато затворите отчет.
Събития за отчети
Когато отворите отчет, за да го отпечатате или прегледате, и по-късно затворите отчета или преминете към друг раздел на обект в Access, за отчета ще възникне следната последователност от събития:
Отвори Активиране затваряне дезактивиране
Когато превключите между два отворени отчета, събитието Deactivate възниква за първия отчет, а събитието Activate възниква за втория отчет:
Deactivate (отчет1) Activate (отчет2)
Събитието Deactivate за отчет възниква и когато превключите от отчета към друг раздел на обект в Access. Събитието Deactivate обаче не възниква, когато превключите към диалогов прозорец, към формуляр, за който свойството PopUp е с настройка Да, или към прозорец в друга програма.
Когато отворите отчет, базиран на заявка, Access задейства събитието Open за отчета, преди да изпълни съответната заявка. В резултат на това можете да зададете критериите за отчета, като използвате макрос или процедура за обработка на събитие, отговарящи на събитието Open. Например макросът или процедурата за обработка на събитие може да отваря диалогов прозорец по избор, в който да въведете критериите за отчета.
Събития за раздели на отчет
Когато отпечатвате или преглеждате отчет, събитията Format и Print за разделите на отчета възникват след събитията Open и Activate за отчета и преди събитията Close или Deactivate за отчета:
Open (отчет) Activate (отчет) Format (секция на отчет) Print (секция на отчет) Close (отчет) Deactivate (отчет)
Защита Можете да използвате изгледа за отчет, за да разрешите потребителско филтриране на отчети. Но за разлика от визуализацията на печата, събитията Format и Print в който и да е раздел не възникват в изглед за отчет. Това се отнася и за резултатите от функциите на VBA и дефинираните от потребителя процедури, които се показват в контроли (като надписи на етикети, състояние на показване, условно форматиране, преоразмеряване на контроли и т.н.) в рамките на тези събития. Следователно не използвайте код в това събитие, за да форматирате, скривате или отпечатвате поверителни данни, които може да се разкрият. Препоръчваме предварително филтриране на данните или забраняване на "Визуализация на отчет", като зададете свойството AllowReportView на "Не".
Освен това посочените по-долу събития могат да възникнат по време на или след форматиране, но преди събитието Print:
-
Събитието Retreat възниква, когато Access се връща към предходен раздел по време на форматирането на отчет.
-
Събитието NoData възниква, ако няма показани от отчета записи.
-
Събитието Page възниква след форматирането, но преди отпечатването. Можете да използвате това събитие, за да персонализирате изгледа на отпечатания отчет.