Jedna akcja, taka jak przejście z jednego elementu typu kontrolka w obiekcie do innej kontrolki, może wyzwolić kilka innych zdarzeń występujących w określonej kolejności. Ważna jest znajomość czasu i kolejności występowania zdarzeń, ponieważ może to wpłynąć na sposób i czas uruchamiania makr, a nawet procedur zdarzeń. Jeśli na przykład dwie procedury zdarzeń mają zostać uruchomione w określonej kolejności, skojarzone z nimi zdarzenia muszą wystąpić w takiej samej kolejności.
W tym artykule
Kolejność zdarzeń kontrolek w formularzach
Zdarzenia kontrolek w formularzach występują w przypadku przeniesienia fokusu do kontrolki oraz zmiany i zaktualizowania danych w kontrolce.
Uwaga: W programie Microsoft Office Access nazwy zdarzeń są wyświetlane nieco inaczej w Edytorze Visual Basic niż w arkuszu właściwości i Konstruktorze makr. Na przykład zdarzenie, które w arkuszu właściwości formularza i Konstruktorze makr ma nazwę Przy uzyskaniu fokusu, w Edytorze Visual Basic nosi nazwę GotFocus. W przykładach w tym artykule użyto nazw zdarzeń w formacie języka Visual Basic for Applications (VBA).
Przenoszenie fokusu do kontrolki
W przypadku przeniesienia fokusu do kontrolki w formularzu (na przykład przez otwarcie formularza zawierającego co najmniej jedną aktywną kontrolkę lub przez przeniesienie fokusu do innej kontrolki w tym samym formularzu) zdarzenia Enter i GotFocus występują w następującej kolejności:
Wprowadź GotFocus
W przypadku otwarcia formularza zdarzenia Enter i GotFocus występują po zdarzeniach skojarzonych z otwarciem formularza (takich jak Open, Activate i Current) w następujące kolejności:
Open (formularz) Activate (formularz) Current (formularz) Enter (kontrolka) GotFocus (kontrolka)
W przypadku przeniesienia fokusu poza kontrolkę w formularzu (na przykład przez zamknięcie formularza zawierającego co najmniej jedną aktywną kontrolkę lub przejście do innej kontrolki w tym samym formularzu) zdarzenia Exit i LostFocus występują w następującej kolejności:
Zamknij LostFocus
W przypadku zamknięcia formularza zdarzenia Exit i LostFocus występują przed zdarzeniami skojarzonymi z zamknięciem formularza (takimi jak Unload, Deactivate i Close) w następującej kolejności:
Exit (kontrolka) LostFocus (kontrolka) Unload (formularz) Deactivate (formularz) Close (formularz)
Zmienianie i aktualizowanie danych w kontrolce
W przypadku wprowadzenia lub zmiany danych w kontrolce w formularzu, a następnie przeniesienia fokusu do innej kontrolki występują zdarzenia BeforeUpdate i AfterUpdate:
BeforeUpdate Afte rUpdate
Zdarzenia Exit i LostFocus kontrolki, której wartość jest zmieniana, występują po zdarzeniach BeforeUpdate i AfterUpdate:
BeforeUpdate AfterUpdate Exit LostFocus
W przypadku zmiany tekstu w polu tekstowym lub w sekcji pola tekstowego w polu kombi występuje zdarzenie Change. To zdarzenie występuje po każdej zmianie zawartości kontrolki, ale przed przeniesieniem fokusu do innej kontrolki lub innego rekordu (dlatego występują przed zdarzeniami BeforeUpdate i AfterUpdate). Poniżej przedstawiono sekwencję zdarzeń występujących dla każdego naciśniętego klawisza w polu tekstowym lub w sekcji pola tekstowego w polu kombi:
KeyDown KeyPress Dirty Change KeyUp
Zdarzenie NotInList występuje po wprowadzeniu wartości w polu kombi, którego nie ma na liście pól kombi, i próbie przeniesienia fokusu do innej kontrolki lub innego rekordu. Zdarzenie NotInList występuje po zdarzeniach klawiatury i zdarzeniach Change pola kombi, ale przed zdarzeniami innej kontrolki lub innego formularza. Jeśli dla właściwości LimitToList pola kombi ustawiono wartość Tak, zdarzenie Error formularza występuje bezpośrednio po zdarzeniu NotInList:
KeyDown KeyPress Dirty Change KeyUp NotInList 0 Error
Kolejność zdarzeń rekordów w formularzach
Zdarzenia rekordów w formularzach występują w przypadku przeniesienia fokusu do innego rekordu, zaktualizowania danych w rekordzie, usunięcia istniejącego rekordu lub utworzenia nowego rekordu.
Przenoszenie fokusu do rekordów i aktualizowanie danych w rekordach
W przypadku przeniesienia fokusu do istniejącego rekordu formularza, wprowadzenia lub zmiany danych w rekordzie, a następnie przeniesienia fokusu do innego rekordu w formularzu występuje następującą sekwencja zdarzeń:
Current (formularz) BeforeUpdate (formularz) AfterUpdate (formularz) Current (formularz)
W przypadku opuszczenia rekordu, którego dane zostały zmienione, przed wprowadzeniem następnego rekordu występują zdarzenia Exit i LostFocus dla kontrolki z fokusem. Te zdarzenia występują po zdarzeniach BeforeUpdate i AfterUpdate formularza w następującej kolejności:
BeforeUpdate (formularz) AfterUpdate (formularz) Exit (kontrolka) LostFocus (kontrolka) Current (formularz)
Przenoszenie fokusu między kontrolkami w formularzu powoduje występowanie zdarzeń dla poszczególnych kontrolek. Na przykład poniższa sekwencja zdarzeń występuje w przypadku wykonania następujących działań:
-
Otwarcie formularza i zmiana danych w kontrolce:
Current (formularz) Enter (kontrolka) GotFocus (kontrolka ) BeforeUpdate (kontrolka) AfterUpdate (kontrolka)
-
Przeniesienie fokusu do innej kontrolki:
Exit (kontrolka1) LostFocus (kontrolka1) Enter (kontrolka 2) GotFocus (kontrolka 2)
-
Przeniesienie fokusu do innego rekordu:
BeforeUpdate (formularz) AfterUpdate (formularz) Exit (kontrolka2) Lo stFocus (kontrolka2) Current (formularz)
Usuwanie rekordów
W przypadku usunięcia rekordu występują następujące zdarzenia formularza, a w programie Microsoft Office Access jest wyświetlane okno dialogowe z monitem o potwierdzenie usunięcia:
Usuwanie BeforeDelConfirm AfterDelConfirm
Jeśli anulujesz zdarzenie Delete, zdarzenia BeforeDelConfirm oraz AfterDelConfirm nie wystąpią i okno dialogowe nie zostanie wyświetlone.
Tworzenie nowego rekordu
W przypadku przeniesienia fokusu do nowego (pustego) rekordu w formularzu, a następnie utworzenia nowego rekordu przez wpisanie danych w kontrolce występuje następująca sekwencja zdarzeń:
Current (formularz) Enter (kontrolka) GotFocus (kontrolka ) BeforeInsert (formularz) AfterInsert (formularz)
Zdarzenie BeforeInsert (formularz) wyzwala się zaraz po rozpoczęciu wpisywania tekstu w kontrolce. Zdarzenie AfterInsert (formularz) wyzwala się po opuszczeniu rekordu.
Zdarzenia BeforeUpdate i AfterUpdate kontrolek formularza oraz nowego rekordu występują po zdarzeniu BeforeInsert i przed zdarzeniem AfterInsert.
Kolejność zdarzeń formularzy i podformularzy
Zdarzenia formularzy występują w przypadku otwarcia i zamknięcia formularza, przejścia między formularzami lub pracy z danymi w formularzu lub podformularzu.
Otwieranie i zamykanie formularza
W przypadku otwarcia formularza występuje następująca sekwencja zdarzeń formularza:
Otwórz Załaduj Zmień rozmiar Aktywuj Bieżące
Jeśli w formularzu nie ma aktywnych kontrolek, zdarzenie GotFocus formularza występuje po zdarzeniu Activate, ale przed zdarzeniem Current.
W przypadku zamknięcia formularza występuje następująca sekwencja zdarzeń formularza:
Zwalnianie Dezaktywuj Zamknij
Jeśli w formularzu nie ma aktywnych kontrolek, zdarzenie LostFocus formularza występuje po zdarzeniu Unload, ale przed zdarzeniem Deactivate.
Przechodzenie między formularzami
W przypadku przełączenia między dwoma otwartymi formularzami występuje zdarzenie Deactivate dla pierwszego formularza i zdarzenie Activate dla drugiego formularza:
Deactivate (formularz1) Activate (formularz2)
Zdarzenie Deactivate formularza występuje również w przypadku przełączenia z formularza do innej karty obiektu w programie Access. Jednak zdarzenie Deactivate nie występuje w przypadku przełączenia do okna dialogowego, do formularza z właściwością PopUp z ustawioną wartością Tak lub do okna w innym programie.
Uwaga: Zdarzenie Open nie występuje w przypadku przeniesienia fokusu do formularza, który jest już otwarty, nawet jeśli przeniesiono fokus do tego formularza przez wykonanie akcji OtwórzFormularz.
Praca z danymi w formularzu
Zdarzenia formularzy i kontrolek występują w przypadku przechodzenia między rekordami w formularzu i zmiany danych. Na przykład w przypadku otwarcia formularza występuje następująca sekwencja zdarzeń:
Open (formularz) Load (formularz) Resize (formularz) Activate (formularz) Current (formularz) Enter (kontrolka)0 GotFocus (kontrolka)
Podobnie w przypadku zamknięcia formularza występuje następująca sekwencja zdarzeń:
Exit (kontrolka) LostFocus (kontrolka) Unload (formularz) Deactivate (formularz) Close (formularz)
Jeśli wprowadzono zmiany danych w kontrolce, zdarzenia BeforeUpdate i AfterUpdate występują dla formularza oraz kontrolki przed zdarzeniem Exit kontrolki.
Praca z podformularzami
W przypadku otwarcia formularza zawierającego podformularz ten podformularz i jego rekordy są ładowane przed formularzem głównym. Dlatego zdarzenia podformularza i jego kontrolek (takie jak Open, Current, Enter i GotFocus) występują przed zdarzeniami formularza. Jednak zdarzenie Activate nie występuje dla podformularzy. Dlatego otwarcie formularza głównego powoduje wyzwolenie zdarzenia Activate tylko dla formularza głównego.
Podobnie w przypadku zamknięcia formularza zawierającego podformularz ten podformularz i jego rekordy są zwalniane po formularzu. Zdarzenie Deactivate nie występuje dla podformularzy. Dlatego zamknięcie formularza głównego powoduje wyzwolenie zdarzenia Deactivate tylko dla formularza głównego. Zdarzenia kontrolek, formularza i podformularza występują w następującej kolejności:
-
Zdarzenia kontrolek podformularza (takie jak Exit i LostFocus)
-
Zdarzenia kontrolek formularza (w tym kontrolki podformularza)
-
Zdarzenia formularza (takie jak Deactivate i Close)
-
Zdarzenia podformularza
Uwaga: Zdarzenia podformularza występują po zamknięciu formularza głównego, dlatego nie wystąpią pewne zdarzenia, takie jak anulowanie zamykania formularza głównego w zdarzeniu w podformularzu. Może być konieczne przeniesienie tego typu testów sprawdzania poprawności do zdarzenia w formularzu głównym.
Kolejność zdarzeń naciśnięć klawiszy i kliknięć myszą
Zdarzenia klawiatury występują dla formularzy i kontrolek w przypadku naciskania klawiszy lub wysyłania naciśnięć klawiszy, gdy formularz lub kontrolka ma fokus. Zdarzenia myszy występują w formularzach, sekcjach formularzy i kontrolkach w formularzach w przypadku klikania przycisków myszy, gdy wskaźnik myszy znajduje się w formularzu, sekcji lub kontrolce. Zdarzenia myszy występują także po umieszczeniu wskaźnika myszy na formularzu, sekcji lub kontrolce.
Zdarzenia klawiatury
W przypadku naciśnięcia i zwolnienia klawisza, gdy fokus jest w kontrolce w formularzu, (lub wysłania naciśnięcia klawisza przy użyciu elementu typu instrukcja lub akcji WyślijKlawisze) występuje następująca sekwencja zdarzeń:
KeyDown KeyPress KeyUp
Po naciśnięciu i zwolnieniu klawisza lub wysłaniu naciśnięcia klawisza w zestaw znaków ANSI występują zdarzenia KeyDown, KeyPress i KeyUp . Jeśli naciśniesz i przytrzymasz klawisz ANSI, zdarzenia KeyDown i KeyPress wielokrotnie na przemian (KeyDown, KeyPress, KeyDown, KeyPress itd.) do momentu zwolnienia klawisza; wtedy występuje zdarzenie KeyUp .
W przypadku naciśnięcia i zwolnienia klawisza innego niż ANSI występują zdarzenia KeyDown i KeyUp. W przypadku naciśnięcia i przytrzymania klawisza innego niż ANSI wielokrotnie występuje zdarzenie KeyDown do czasu zwolnienia klawisza — wtedy występuje zdarzenie KeyUp.
Jeśli naciśnięcie klawisza powoduje wyzwolenie innego zdarzenia kontrolki, to zdarzenie występuje po zdarzeniu KeyPress, ale przed zdarzeniem KeyUp. Jeśli na przykład naciśnięcie klawisza powoduje zmianę tekstu w polu tekstowym, co powoduje wyzwolenie zdarzenia Change, występuje następująca sekwencja zdarzeń:
KeyDown KeyPress Change KeyUp
Jeśli naciśnięcie klawisza powoduje przeniesienie fokusu do innej kontrolki, występuje zdarzenie KeyDown dla pierwszej kontrolki, natomiast dla drugiej kontrolki występują zdarzenia KeyPress i KeyUp. Jeśli na przykład zmienisz dane w kontrolce, a następnie naciśniesz klawisz TAB w celu przejścia do następnej kontrolki, wystąpią następujące sekwencje zdarzeń:
-
Pierwsza kontrolka:
KeyDown BeforeUpdate AfterUpdate Exit LostFocus
-
Druga kontrolka:
Wprowadź GotFocus KeyPress KeyUp
Zdarzenia myszy
W przypadku kliknięcia i zwolnienia przycisku myszy, gdy wskaźnik myszy znajduje się na kontrolce w formularzu, występuje następująca sekwencja zdarzeń kontrolki:
MouseDown MouseUp Click
Jeśli fokus jest ustawiony w kontrolce i klikniesz inną kontrolkę w celu przeniesienia do niej fokusu, wystąpią następujące sekwencje zdarzeń:
-
Pierwsza kontrolka:
Zamknij LostFocus
-
Druga kontrolka:
Wprowadź GotFocus MouseDown MouseUp Click
Jeśli przejdziesz do innego rekordu, a następnie klikniesz kontrolkę, wystąpi też zdarzenie Current formularza przed zdarzeniem Enter kontrolki.
Dwukrotne kliknięcie kontrolki powoduje wystąpienie zdarzeń Click i DblClick. Na przykład dwukrotne kliknięcie kontrolki innej niż przycisk polecenia powoduje wystąpienie następującej sekwencji zdarzeń kontrolki:
MouseD własne MouseUp Click DblClick MouseUp
W przypadku dwukrotnego kliknięcia przycisku polecenia występuje powyższa sekwencja zdarzeń, po której występuje drugie zdarzenie Click.
Zdarzenie MouseMove formularza, sekcji lub kontrolki występuje w przypadku umieszczenia wskaźnika myszy na formularzu, sekcji lub kontrolce. To zdarzenie nie zależy od innych zdarzeń myszy.
Kolejność zdarzeń raportów i sekcji raportów
Zdarzenia raportów i sekcji raportów występują w przypadku otwarcia raportu w celu wydrukowania go lub wyświetlenia jego podglądu albo zamknięcia raportu.
Zdarzenia raportów
W przypadku otwarcia raportu w celu wydrukowania go lub wyświetlenia jego podglądu, a następnie późniejszego zamknięcia raportu lub przejścia do innej karty obiektów w programie Access występuje następująca sekwencja zdarzeń raportu:
Otwórz Aktywuj Zamknij Dezaktywuj
W przypadku przełączenia między dwoma otwartymi raportami występuje zdarzenie Deactivate dla pierwszego raportu i zdarzenie Activate dla drugiego raportu:
Deactivate (raport1) Activate (raport2)
Zdarzenie Deactivate raportu występuje również w przypadku przełączenia z raportu do innej karty obiektu w programie Access. Jednak zdarzenie Deactivate nie występuje w przypadku przełączenia do okna dialogowego, do formularza z właściwością PopUp z ustawioną wartością Tak lub do okna w innym programie.
W przypadku otwarcia raportu opartego na zapytaniu program Access wyzwala zdarzenie Open raportu przed uruchomieniem zapytania. W wyniku tego można ustawić kryteria raportu przy użyciu makra lub procedury zdarzenia odpowiadającej na zdarzenie Open. Na przykład makro lub procedura zdarzenia umożliwia otwarcie niestandardowego okna dialogowego, w którym można wprowadzić kryteria raportu.
Zdarzenia sekcji raportów
W przypadku drukowania raportu lub wyświetlania jego podglądu występują zdarzenia Format i Print sekcji raportu po zdarzeniach Open i Activate raportu oraz przed zdarzeniami Close i Deactivate raportu:
Open (raport) Activate (raport) Format (sekcja raportu) Print (sekcja raportu) Close (raport) Deactivate (raport)
Zabezpieczenia Widok raportu umożliwia filtrowanie raportów przez użytkowników. Jednak w przeciwieństwie do podglądu wydruku zdarzenia Formatuj i Drukuj w żadnej sekcji nie występują w widoku raportu. Dotyczy to również wyników funkcji języka VBA oraz procedur zdefiniowanych przez użytkownika, które są wyświetlane w kontrolkach (takich jak podpisy etykiet, stan wyświetlania, formatowanie warunkowe, zmiana rozmiaru kontrolek itd.) w tych zdarzeniach. Dlatego nie używaj kodu w tym zdarzeniu do formatowania, ukrywania lub drukowania poufnych danych, które mogą zostać ujawnione. Zalecamy wstępne filtrowanie danych lub wyłączanie podglądu raportu, ustawiając właściwość AllowReportView na No (Nie).
Ponadto mogą wystąpić następujące zdarzenia podczas formatowania lub po jego zakończeniu, ale przed zdarzeniem Print:
-
Zdarzenie Retreat występuje w przypadku powrotu programu Access do poprzedniej sekcji podczas formatowania raportu.
-
Zdarzenie NoData występuje w przypadku braku rekordów wyświetlanych w raporcie.
-
Zdarzenie Page występuje po zakończeniu formatowania, ale przed rozpoczęciem drukowania. Za pomocą tego zdarzenia można dostosować wygląd drukowanego raportu.