Una sola azione, come il passaggio da un controllo su un oggetto a un altro controllo, può attivare diversi eventi che si verificano in una determinata sequenza. È importante sapere quando e in quale ordine si verificano gli eventi, perché questi due aspetti possono influire sul modo e sul momento di esecuzione di macro e routine evento. Se ad esempio sono presenti due routine evento che devono essere eseguite in un determinato ordine, è necessario assicurarsi che gli eventi ai quali sono associate si verifichino nello stesso ordine.
In questo articolo
Ordine degli eventi per i controlli sulle maschere
Gli eventi per i controlli sulle maschere si verificano quando si sposta lo stato attivo su un controllo e quando vengono modificati e aggiornati i dati in un controllo.
Nota: In Microsoft Office Access i nomi degli eventi sono in inglese in Visual Basic Editor, mentre sono localizzati nella finestra delle proprietà e nel Generatore di macro. L'evento denominato Su attivato nella finestra delle proprietà e nel Generatore di macro è riportato con il nome GotFocus in Visual Basic Editor. Negli esempi di questo articolo per i nomi degli eventi viene usato il formato di Visual Basic, Applications Edition (VBA).
Spostamento dello stato attivo su un controllo
Quando lo stato attivo viene spostato su un controllo in una maschera, ad esempio se si apre una maschera che contiene uno o più controlli attivi o ci si sposta su un controllo diverso nella stessa maschera, gli eventi Enter e GotFocus si verificano nel seguente ordine:
Immettere GotFocus
Quando si apre una maschera, gli eventi Enter e GotFocus si verificano dopo gli eventi associati all'apertura della maschera, ad esempio Open, Activate e Current, come riportato di seguito:
Open (maschera) Activate (maschera) Current (maschera) ENTER (controllo) GotFocus (controllo)
Quando un controllo di una maschera perde lo stato attivo, ad esempio quando si chiude una maschera che contiene uno o più controlli attivi oppure quando ci si sposta su un controllo diverso nella stessa maschera, gli eventi Exit e LostFocus si verificano nell'ordine seguente:
Uscire da LostFocus
Quando si chiude una maschera, gli eventi Exit e LostFocus si verificano prima degli eventi associati alla chiusura della maschera, ad esempio Unload, Deactivate e Close, come riportato di seguito:
Exit (controllo) LostFocus (controllo) Unload (maschera) Deactivate (maschera) Close (maschera)
Modifica e aggiornamento dei dati di un controllo
Quando si immettono o si modificano dati in un controllo di una maschera e quindi si sposta lo stato attivo su un controllo diverso, si verificano gli eventi BeforeUpdate e AfterUpdate:
BeforeUpdate Afte rUpdate
Gli eventi Exit e LostFocus del controllo di cui si modifica il valore si verificano dopo gli eventi BeforeUpdate e AfterUpdate:
BeforeUpdate AfterUpdate Exit LostFocus
Quando si modifica il testo in una casella di testo o nella sezione casella di testo di una casella combinata, si verifica l'evento Change. Questo evento si verifica ogni volta che il contenuto del controllo viene modificato, ma prima dello spostamento dello stato attivo su un controllo o un record diverso, pertanto prima che si verifichino gli eventi BeforeUpdate e AfterUpdate. La sequenza di eventi riportata di seguito si verifica per ogni tasto che viene premuto in una casella di testo o nella sezione casella di testo di una casella combinata:
KeyDown KeyPress Dirty Change KeyUp
L'evento NotInList si verifica se si immette in una casella combinata un valore non contenuto nell'elenco della casella combinata e in seguito si tenta di spostare lo stato attivo su un altro controllo o record. L'evento NotInList si verifica dopo gli eventi della tastiera e gli eventi Change relativi alla casella combinata, ma prima degli eventi relativi agli altri controlli o alla maschera. Se la proprietà LimitToList della casella combinata è impostata su Sì, l'evento Error della maschera si verifica subito dopo l'evento NotInList:
Errore 0 KeyUp KeyPress Dirty Change KeyUp NotInList
Ordine degli eventi per i record sulle maschere
Gli eventi relativi ai record sulle maschere si verificano quando si sposta lo stato attivo su un record diverso, si aggiornano i dati di un record o si eliminano uno o più record esistenti oppure si crea un nuovo record.
Spostamento dello stato attivo su record e aggiornamento di dati dei record
Quando si sposta lo stato attivo su un record esistente di una maschera, si immettono o si modificano i dati nel record e quindi si sposta lo stato attivo su un record diverso, per la maschera si verifica la sequenza di eventi seguente:
Current (maschera) BeforeUpdate (maschera) AfterUpdate (maschera) Current (maschera)
Dopo l'uscita dal record di cui sono stati modificati i dati e prima dell'entrata nel record successivo, si verificano gli eventi Exit e LostFocus per il controllo con lo stato attivo. Questi eventi si verificano dopo gli eventi BeforeUpdate e AfterUpdate relativi alla maschera, come riportato di seguito:
BeforeUpdate (maschera) AfterUpdate (maschera) Exit (controllo) LostFocus (controllo) Current (maschera)
Durante lo spostamento dello stato attivo tra i controlli di una maschera, si verificano eventi per ogni controllo. Si verificano ad esempio le sequenze di eventi riportate di seguito quando si eseguono le operazioni seguenti:
-
Apertura di una maschera e modifica dei dati di un controllo:
Current (maschera) ENTER (controllo) GotFocus (controllo) BeforeUpdate (controllo) AfterUpdate (controllo)
-
Spostamento dello stato attivo su un controllo diverso:
Exit (controllo1) LostFocus (controllo1) INVIO (controllo2) GotFocus (controllo2)
-
Spostamento dello stato attivo su un record diverso:
BeforeUpdate (maschera) AfterUpdate (maschera) Exit (controllo2) LostFocus (controllo2) Current (maschera)
Eliminazione di record
Quando si elimina un record, per la maschera si verificano gli eventi riportati di seguito e Microsoft Office Access visualizza una finestra di dialogo in cui viene chiesto di confermare l'eliminazione:
Eliminare BeforeDelConfirm AfterDelConfirm
Se si annulla l'evento Delete, gli eventi BeforeDelConfirm e AfterDelConfirm non si verificano e la finestra di dialogo non viene visualizzata.
Creazione di un nuovo record
Quando si sposta lo stato attivo su un record nuovo (vuoto) in una maschera e quindi si crea un nuovo record digitando dati in un controllo, si verifica la sequenza di eventi seguente:
Current (maschera) ENTER (controllo) GotFocus (controllo) BeforeInsert (maschera) AfterInsert (maschera)
L'evento BeforeInsert (maschera) viene attivato non appena si inizia a digitare nel controllo. L'evento AfterInsert (maschera) si attiva dopo l'uscita dal record.
Gli eventi BeforeUpdate e AfterUpdate per i controlli sulla maschera e per il nuovo record si verificano dopo l'evento BeforeInsert e prima dell'evento AfterInsert.
Ordine degli eventi per le maschere e le sottomaschere
Gli eventi relativi alle maschere si verificano quando si apre o si chiude una maschera, ci si sposta tra maschere o si usano i dati presenti in una maschera o una sottomaschera.
Apertura e chiusura di una maschera
Quando si apre una maschera, per la maschera si verifica la sequenza di eventi seguente:
Aprire Carica Ridimensiona Attiva Corrente
Se nella maschera non sono presenti controlli attivi, si verifica l'evento GotFocus per la maschera dopo l'evento Activate, ma prima dell'evento Current.
Quando si chiude una maschera, per la maschera si verifica la sequenza di eventi seguente:
Scarica Disattiva Chiudi
Se nella maschera non sono presenti controlli attivi, si verifica l'evento LostFocus per la maschera dopo l'evento Unload, ma prima dell'evento Deactivate.
Spostamento tra maschere
Quando si passa tra due maschere aperte, si verifica l'evento Deactivate per la prima maschera e l'evento Activate per la seconda maschera:
Deactivate (modulo1) Activate (modulo2)
L'evento Deactivate per una maschera si verifica anche quando si passa dalla maschera a un'altra scheda di oggetto di Access. L'evento Deactivate tuttavia non si verifica quando si passa a una finestra di dialogo, a una maschera la cui proprietà PopUp è impostata su Sì o a una finestra di un altro programma.
Nota: L'evento Open non si verifica se si sposta lo stato attivo su una maschera già aperta, anche se lo stato attivo è stato spostato su tale maschera eseguendo un'azione OpenForm.
Uso dei dati di una maschera
Gli eventi relativi a maschere e controlli si verificano quando ci si sposta tra i record nella maschera e si modificano dati. Quando ad esempio si apre per la prima volta una maschera, si verifica la sequenza di eventi seguente:
Open (maschera) Load (maschera) Resize (maschera) Activate (maschera) Current (maschera) Enter (controllo)0 GotFocus (controllo)
Analogamente, quando si chiude una maschera, si verifica la sequenza di eventi seguente:
Exit (controllo) LostFocus (controllo) Unload (maschera) Deactivate (maschera) Close (maschera)
Se sono stati modificati dati in un controllo, gli eventi BeforeUpdate e AfterUpdate del controllo e della maschera si verificano prima dell'evento Exit relativo al controllo.
Uso di sottomaschere
Quando si apre una maschera che contiene una sottomaschera, la sottomaschera e i relativi record vengono caricati prima della maschera principale. Di conseguenza, gli eventi della sottomaschera e dei relativi controlli, ad esempio Open, Current, Enter e GotFocus, si verificano prima degli eventi della maschera. Tuttavia, l'evento Activate non si verifica per le sottomaschere. Di conseguenza, l'apertura di una maschera principale attiva un evento Activate solo per la maschera principale.
Analogamente, quando si chiude una maschera che contiene una sottomaschera, la sottomaschera e i relativi record vengono scaricati dopo la maschera. L'evento Deactivate non si verifica per le sottomaschere. Di conseguenza, la chiusura di una maschera principale attiva un evento Deactivate solo per la maschera principale. Gli eventi per i controlli, la maschera e la sottomaschera si verificano nell'ordine seguente:
-
Eventi dei controlli della sottomaschera (ad esempio Exit e LostFocus)
-
Eventi dei controlli della maschera (incluso il controllo sottomaschera)
-
Eventi della maschera (ad esempio Deactivate e Close)
-
Eventi della sottomaschera
Nota: Poiché gli eventi di una sottomaschera si verificano dopo la chiusura della maschera principale, alcuni eventi, ad esempio l'annullamento della chiusura della maschera principale da un evento della sottomaschera, non si verificheranno. Può essere necessario spostare questi tipi di test di convalida in un evento della maschera principale.
Ordine degli eventi per le sequenze di tasti e i clic del mouse
Gli eventi della tastiera per maschere e controlli si verificano quando si premo i tasti o si inviano sequenze di tasti mentre la maschera o il controllo ha il stato attivo. Gli eventi del mouse si verificano per maschere, sezioni di maschere e controlli nelle maschere quando si fa clic sui pulsanti del mouse mentre il puntatore del mouse si trova su una maschera, una sezione o un controllo. Gli eventi del mouse si verificano anche quando si sposta il puntatore del mouse su una maschera, una sezione o un controllo.
Eventi della tastiera
Quando si preme e si rilascia un tasto mentre lo stato attivo si trova su un controllo di una maschera oppure si usa l'azione o l'istruzioneSendKeys per inviare una sequenza di tasti, si verifica la sequenza di eventi seguente:
KeyDown KeyPress KeyUp
Quando si preme e si rilascia un tasto o si invia una sequenza di tasti nella set di caratteri ANSI, si verificano tutti gli eventi KeyDown, KeyPress e KeyUp . Se si tiene premuto un tasto ANSI, gli eventi KeyDown e KeyPress si alternano ripetutamente (KeyDown, KeyPress, KeyDown, KeyPress e così via) finché non si rilascia il tasto; quindi si verifica l'evento KeyUp .
Se si preme e si rilascia un tasto non ANSI, si verificano gli eventi KeyDown e KeyUp . Se si tiene premuto un tasto non ANSI, l'evento KeyDown si verifica più volte finché non si rilascia il tasto, quindi si verifica l'evento KeyUp .
Se la pressione di un tasto attiva un altro evento per un controllo, quest'ultimo evento si verifica dopo l'evento KeyPress, ma prima dell'evento KeyUp. Se ad esempio una sequenza di tasti modifica il testo in una casella di testo, attivando un evento Change, si verifica la sequenza di eventi seguente:
KeyDown KeyPress Change KeyUp
Se una sequenza di tasti provoca lo spostamento dello stato attivo da un controllo a un altro, si verifica l'evento KeyDown per il primo controllo, mentre gli eventi KeyPress e KeyUp si verificano per il secondo controllo. Se ad esempio si modificano dati in un controllo e quindi si preme TAB per spostarsi al controllo successivo, si verifica la sequenza di eventi seguente:
-
Primo controllo:
KeyDown BeforeUpdate AfterUpdate Exit LostFocus
-
Secondo controllo:
Enter GotFocus KeyPress KeyUp
Eventi del mouse
Quando si fa clic e quindi si rilascia un pulsante del mouse mentre il puntatore si trova su un controllo di una maschera, per il controllo si verifica la sequenza di eventi seguente:
MouseDown MouseUp Click
Se un controllo ha lo stato attivo e si fa clic su un altro controllo per spostare lo stato attivo su di esso, si verifica la sequenza di eventi seguente:
-
Primo controllo:
Uscire da LostFocus
-
Secondo controllo:
Enter GotFocus MouseDown MouseUp Click
Se ci si sposta in un record diverso e quindi si fa clic su un controllo, si verifica anche l'evento Current della maschera prima dell'evento Enter del controllo.
Se si fa doppio clic su un controllo, si verificano gli eventi Click e DblClick. Quando ad esempio si fa doppio clic su un controllo che non è un pulsante di comando, per il controllo si verifica la sequenza di eventi seguente:
MouseD own MouseUp Click DblClick MouseUp
Quando si fa doppio clic su un pulsante di comando, si verifica la sequenza di eventi riportata sopra, seguita da un secondo evento Click.
L'evento MouseMove di una maschera, una sezione o un controllo si verifica quando si sposta il puntatore del mouse sulla maschera, sulla sezione o sul controllo. Questo evento è indipendente dagli altri eventi del mouse.
Ordine degli eventi per i report e le sezioni di report
Gli eventi di report e sezioni di report si verificano quando un report viene aperto per essere stampato o visualizzato in anteprima oppure quando viene chiuso.
Eventi di report
Quando si apre un report per stamparlo o visualizzarlo in anteprima e quindi lo si chiude o ci si sposta in un'altra scheda di oggetto di Access, per il report si verifica la sequenza di eventi seguente:
Apri Attiva Chiudi Disattiva
Quando ci si sposta tra due report aperti, l'evento Deactivate si verifica per il primo report e l'evento Activate per il secondo report:
Deactivate (report1) Activate (report2)
L'evento Deactivate per un report si verifica anche quando si passa dal report a un'altra scheda di oggetto di Access. L'evento Deactivate tuttavia non si verifica quando si passa a una finestra di dialogo, a una maschera la cui proprietà PopUp è impostata su Sì o a una finestra di un altro programma.
Quando si apre un report basato su una query, Access attiva l'evento Open per il report prima dell'esecuzione della query sottostante. Di conseguenza, è possibile impostare i criteri per il report usando una macro o una routine evento che risponda all'evento Open. La macro o la routine evento, ad esempio, potrebbe causare l'apertura di una finestra di dialogo personalizzata nella quale immettere i criteri per il report.
Eventi per sezioni di report
Quando si stampa o si visualizza in anteprima un report, gli eventi Format e Print si verificano per le sezioni di report dopo gli eventi Open e Activate del report e prima degli eventi Close o Deactivate del report:
Open (report) Activate (report) Format (sezione report) Print (sezione report) Close (report) Deactivate (report)
Sicurezza È possibile usare la visualizzazione Report per abilitare il filtro dei report da parte degli utenti. A differenza di Anteprima di stampa, tuttavia, gli eventi Formato e Stampa in qualsiasi sezione non si verificano in visualizzazione report. Questo vale anche per i risultati delle funzioni VBA e le procedure definite dall'utente che vengono visualizzate nei controlli (come didascalie delle etichette, stato di visualizzazione, formattazione condizionale, ridimensionamento dei controlli e così via) all'interno di tali eventi. Di conseguenza, non usare codice in questo evento per formattare, nascondere o stampare dati riservati, che potrebbero essere esposti. È consigliabile pre-filtrare i dati o disabilitare l'anteprima del report impostando la proprietà AllowReportView su No.
È possibile inoltre che gli eventi seguenti si verifichino durante o dopo la formattazione, ma prima dell'evento Print:
-
L'evento Retreat si verifica quando Access torna a una sezione precedente durante la formattazione di un report.
-
L'evento NoData si verifica se nel report non sono visualizzati record.
-
L'evento Page si verifica dopo la formattazione, ma prima della stampa. È possibile usare questo evento per personalizzare l'aspetto del report stampato.