Uma única ação, como mover um controlo num objeto para outro controlo pode desencadear vários eventos que ocorrem numa sequência específica. Saber quando os eventos ocorrem e por que ordem é importante, porque pode afetar como e quando as suas macros ou procedimentos de eventos são executados. Por exemplo, se existirem dois procedimentos de eventos que tenham de ser executados numa determinada ordem, deverá certificar-se de que os eventos a que estão associados ocorrem pela mesma ordem.
Neste artigo
Ordem de eventos para controlo em formulários
Os eventos dos controlos em formulários ocorrem quando move o foco para um controlo e quando altera e atualiza os dados num controlo.
Nota: O Microsoft Office Access apresenta os nomes de eventos de forma ligeiramente diferente no Visual Basic Editor do que na folha de propriedades e no Construtor de Macros. Por exemplo, o evento designado Ao Receber Foco na folha de propriedades do formulário e no Construtor de Macros designa-se GotFocus no Visual Basic Editor. Os exemplos neste artigo utilizam o formato de nomes de eventos do Visual Basic for Applications (VBA).
Mover o foco para um controlo
Quando move o foco para um controlo num formulário (por exemplo, ao abrir um formulário que contém um ou mais controlos ativos ou ao mover o foco para outro controlo no mesmo formulário), os eventos Enter e GotFocus ocorrem pela seguinte ordem:
Introduza GotFocus
Quando abre um formulário, os eventos Enter e GotFocus ocorrem após os eventos associados à abertura do formulário (como Open, Activate e Current), da seguinte forma:
Abrir (formulário) Ativar (formulário) Atual (formulário) Enter (controlo) GotFocus (controlo)
Quando o foco deixa um controlo num formulário (por exemplo, quando fecha um formulário que contém um ou mais controlos ativos ou quando se desloca para outro controlo no mesmo formulário), os eventos Exit e LostFocus ocorrem pela seguinte ordem:
Sair LostFocus
Quando fecha um formulário, os eventos Exit e LostFocus ocorrem antes dos eventos associados ao fecho do formulário (como Unload, Deactivate e Close), pela seguinte ordem:
Sair (controlo) LostFocus (controlo) Descarregar (formulário) Desativar (formulário) Fechar (formulário)
Alterar e atualizar dados num controlo
Quando introduz ou altera dados existentes num controlo num formulário e, em seguida, muda o foco para outro controlo, ocorrem os eventos BeforeUpdate e AfterUpdate:
BeforeUpdate Afte rUpdate
Os eventos Exit e LostFocus de um controlo cujo valor é alterado ocorrem após os eventos BeforeUpdate e AfterUpdate:
BeforeUpdate AfterUpdate Exit LostFocus
Quando altera o texto numa caixa de texto ou na secção de caixa de texto de uma caixa de combinação, ocorre o evento Change. Este evento ocorre sempre que os conteúdos do controlo são alterados, mas antes de mover o foco para um controlo ou registo diferente (e, por isso, antes de os eventos BeforeUpdate e AfterUpdate ocorrerem). A seguinte sequência de eventos ocorre para cada tecla que prime na caixa de texto ou na secção de caixa de texto numa caixa de combinação:
KeyDown KeyPress Desactivar Alteração KeyUp
O evento NotInList ocorre após introduzir um valor numa caixa de combinação que não se encontra na lista da caixa de combinação e, em seguida, tenta mover o foco para outro controlo ou registo. O evento NotInList ocorre após os eventos do teclado e os eventos Change da caixa de combinação, mas ocorre antes dos eventos de qualquer outro controlo ou do formulário. Se a propriedade LimitToList da caixa de combinação estiver definida para Sim, o evento Error do formulário ocorre imediatamente após o evento NotInList:
KeyDown KeyPress Erro de0 de Alteraçãode #x6 Não Listado
Ordem de eventos para registos em formulários
Os eventos de registos em formulários ocorrem quando muda o foco para um registo diferente, quando atualiza os dados num registo, quando elimina um ou mais registos existentes ou quando cria um novo registo.
Mover o foco para registos e atualizar dados em registos
Quando move o foco para um registo existente num formulário, introduz ou altera os dados no registo e, em seguida, move o foco para outro registo, ocorre a sequência de eventos seguinte no formulário:
Atual (formulário) BeforeUpdate (formulário) AfterUpdate (formulário) Atual (formulário)
Quando sai de um registo cujos dados foram alterados, mas ainda antes de entrar no registo seguinte, ocorrem os seguintes eventos no controlo que tem o foco: Exit e LostFocus. Estes eventos ocorrem após os eventos BeforeUpdate e AfterUpdate no formulário, da seguinte forma:
BeforeUpdate (formulário) AfterUpdate (formulário) Exit (control) LostFocus (controlo) Current (formulário)
À medida que move o foco entre controlos num formulário, ocorrem eventos para cada controlo. Por exemplo, as seguintes sequências de eventos ocorrem quando faz o seguinte:
-
Abre um formulário e altera dados num controlo:
Atual (formulário) Enter (controlo) GotFocus (controlo) BeforeUpdate (controlo) AfterUpdate (controlo)
-
Move o foco para outro controlo:
Exit (control1) LostFocus (controlo1) Enter (controlo2) GotFocus (controlo2)
-
Move o foco para outro registo:
BeforeUpdate (formulário) AfterUpdate (formulário) Exit (control2) LostFocus (control2) Current (formulário)
Eliminar registos
Quando elimina um registo, ocorrem os seguintes eventos no formulário e o Microsoft Office Access apresenta uma caixa de diálogo a pedir-lhe para confirmar a eliminação:
Eliminar BeforeDelConfirm AfterDelConfirm
Se cancelar o evento Delete, os eventos BeforeDelConfirm e AfterDelConfirm não ocorrem e a caixa de diálogo não é apresentada.
Criar um novo registo
Quando move o foco para um novo registo (em branco) num formulário e, em seguida, cria um novo registo ao introduzir dados num controlo, ocorre a seguinte sequência de eventos:
Atual (formulário) Enter (controlo) GotFocus (controlo) BeforeInsert (formulário) AfterInsert (formulário)
O evento BeforeInsert (formulário) é acionado assim que começar a escrever no controlo. O evento AfterInsert (formulário) é acionado depois de sair do registo.
Os eventos BeforeUpdate e AfterUpdate dos controlos no formulário e do novo registo ocorrem após o evento BeforeInsert e antes do evento AfterInsert.
Ordem de eventos para formulário e subformulários
Os eventos de formulários ocorrem quando abre ou fecha um formulário, quando se desloca entre formulários ou quando trabalha com dados num formulário ou subformulário
Abrir e fechar um formulário
Quando abre um formulário, ocorre a seguinte sequência de eventos para o formulário:
Abrir Carregar Redimensionar Ativar Atual
Se não existirem controlos ativos no formulário, o evento GotFocus ocorre no formulário após o evento Activate, mas antes do evento Current.
Quando fecha um formulário, ocorre a seguinte sequência de eventos para o formulário:
Descarregar Desativar Fechar
Se não existirem controlos ativos no formulário, o evento LostFocus ocorre no formulário após o evento Unload mas antes do evento Deactivate.
Deslocar-se entre formulários
Quando alterna entre dois formulários abertos, o evento Deactivate ocorre no primeiro formulário e o evento Activate ocorre no segundo formulário:
Desativar (formulário1) Ativar (formulário2)
O evento Deactivate de um formulário também ocorre quando muda do formulário para outro separador de objeto no Access. No entanto, o evento Deactivate não ocorre quando muda para uma caixa de diálogo, para um formulário cuja propriedade PopUp esteja definida para Sim ou para uma janela noutro programa.
Nota: O evento Open não ocorre se mudar o foco para um formulário que já se encontre aberto, mesmo que tenha movido o foco para esse formulário ao executar a ação AbrirFormulário.
Trabalhar com dados num formulário
Os eventos de formulário e de controlo ocorrem à medida que se desloca entre os registos do formulário e altera os dados. Por exemplo, quando abre um formulário pela primeira vez, ocorre a seguinte sequência de eventos:
Abrir (formulário) Carregar (formulário) Redimensionar (formulário) Ativar (formulário) Atual (formulário) Enter (controlo)0 GotFocus (controlo)
De forma semelhante, quando fecha um formulário, ocorre a seguinte sequência de eventos:
Sair (controlo) LostFocus (controlo) Descarregar (formulário) Desativar (formulário) Fechar (formulário)
Se tiver alterado dados num controlo, os eventos BeforeUpdate e AfterUpdate para o controlo e para o formulário ocorrem antes do evento Exit do controlo.
Trabalhar com subformulários
Quando abre um formulário que contém um subformulário, o subformulário e os respetivos registos são carregados antes do formulário principal. Por essa razão, os eventos do subformulário e respetivos controlos (como Open, Current, Enter e GotFocus) ocorrem antes dos eventos do formulário. No entanto, o evento Activate não ocorre em subformulários. Por essa razão, quando abre um formulário principal, o evento Activate é ativado apenas para o formulário principal.
Da mesma forma, quando fecha um formulário que contém um subformulário, o subformulário e os respetivos registos são descarregados após o formulário. O evento Deactivate não ocorre para subformulários. Por essa razão, fechar um formulário principal ativa o evento Deactivate apenas para o formulário principal. Os eventos de controlo, formulário e subformulário ocorrem pela seguinte ordem:
-
Eventos para os controlos do subformulário (comoExit e LostFocus)
-
Eventos para os controlos do formulário (incluindo o controlo do subformulário)
-
Eventos para o formulário (como Deactivate e Close)
-
Eventos para o subformulário
Nota: Uma vez que os eventos de um subformulário ocorrem após o formulário principal ser fechado, alguns eventos, como cancelar o fecho do formulário principal de um evento no subformulário, não irão ocorrer. Poderá ter de mover estes tipos de testes de validação para um evento no formulário principal.
Ordem de eventos para batimentos de teclas e cliques do rato
Os eventos de teclado ocorrem em formulários e controlos quando prime as teclas ou envia batimentos de teclas enquanto o formulário ou controlo tem o foco. Os eventos de rato ocorrem em formulários, secções de formulários e controlos em formulários quando clica nos botões do rato enquanto o ponteiro do rato se encontra num formulário, secção ou controlo. Os eventos de rato também ocorrem quando move o ponteiro do rato sobre um formulário, uma secção ou um controlo.
Eventos de teclado
Quando prime e solta uma tecla enquanto o foco se encontra num controlo num formulário (ou utiliza a ação SendKeys ou declaração para enviar um batimento de teclas), ocorre a seguinte sequência de eventos:
KeyDown KeyPress KeyUp
Quando prime e solta uma tecla ou envia um batimento de teclas no conjunto de carateres ANSI, ocorrem os eventos KeyDown, KeyPress e KeyUp. Se premir uma tecla ANSI sem a soltar, os eventos KeyDown e KeyPress alternam-se repetidamente (KeyDown, KeyPress, KeyDown, KeyPress e assim por diante) até que solte a tecla; em seguida, ocorre o evento KeyUp.
Se premir e soltar uma tecla não-ANSI, ocorrem os eventos KeyDown e KeyUp. Se premir uma tecla não-ANSI sem a soltar, o evento KeyDown ocorre repetidamente até que liberte a tecla, após o que ocorre o evento KeyUp.
Se premir uma tecla acionar outro evento de um controlo, esse evento ocorre após o evento KeyPress mas antes do evento KeyUp. Por exemplo, se um batimento de teclas alterar o texto numa caixa de texto, que aciona um evento Change, ocorre a seguinte sequência de eventos:
KeyDown KeyPress Alterar KeyUp
Se um batimento de tecla fizer com que o foco mude de um controlo para outro, ocorre o evento KeyDown no primeiro controlo, enquanto os eventos KeyPress e KeyUp ocorrem no segundo controlo. Por exemplo, se alterar os dados num controlo e, em seguida, premir a Tecla de Tabulação para se deslocar para o controlo seguinte, ocorrem as seguintes sequências de eventos:
-
Primeiro controlo:
KeyDown BeforeUpdate AfterUpdate Exit LostFocus
-
Segundo controlo:
Introduza GotFocus KeyPress KeyUp
Eventos de rato
Quando clica e solta um botão do rato enquanto o ponteiro do rato se encontra num controlo num formulário, ocorre a seguinte sequência de eventos no controlo:
Clique em MouseDown MouseUp
Se um controlo tiver o foco e clicar noutro controlo para mover o foco para o segundo controlo, ocorrem as seguintes sequências de eventos:
-
Primeiro controlo:
Sair LostFocus
-
Segundo controlo:
Introduza GotFocus MouseDown MouseUp Clique
Se mover para outro registo e em seguida clicar num controlo, o evento Current do formulário também ocorre antes do evento Enter do controlo.
Fazer duplo clique num controlo faz com que ambos os eventos Click e DblClick ocorram. Por exemplo, quando faz duplo clique num controlo que não seja um botão de comando, ocorre a seguinte sequência de eventos no controlo:
MouseD own MouseUp Clique em DblClick MouseUp
Quando faz duplo clique no botão de comando, ocorre a sequência de eventos precedente, seguida de um segundo evento Click.
O evento MouseMove de um formulário, secção ou controlo ocorre quando move o ponteiro do rato sobre o formulário, secção ou controlo. Este evento é independente dos outros eventos de rato.
Ordem de eventos para relatórios e secções de relatórios
Os eventos de relatórios e secções de relatórios ocorrem quando abre um relatório para o imprimir ou pré-visualizar ou quando fecha um relatório.
Eventos de relatórios
Quando abre um relatório para o imprimir ou pré-visualizar e depois fecha o relatório ou muda para outro separador de objeto no Access, ocorre a seguinte sequência de eventos no relatório:
Abrir Ativar Fechar Desativar
Quando alterna entre dois relatórios abertos, o evento Deactivate ocorre no primeiro relatório e o evento Activate ocorre no segundo relatório:
Desativar (relatório1) Ativar (relatório2)
O evento Deactivate de um relatório também ocorre quando muda do relatório para outro separador de objeto no Access. No entanto, o evento Deactivate não ocorre quando muda para uma caixa de diálogo, para um formulário cuja propriedade PopUp esteja definida para Sim ou para uma janela noutro programa.
Quando abre um relatório baseado numa consulta, o Access ativa o evento Open do relatório antes de executar a consulta subjacente. Como resultado, pode definir os critérios do relatório através de uma macro ou um procedimento de evento que responda ao evento Open. Por exemplo, a macro ou o procedimento de evento podem abrir uma caixa de diálogo personalizada na qual pode introduzir critérios do relatório.
Eventos para secções de relatórios
Quando imprime ou pré-visualiza um relatório, os eventos Format e Print ocorrem nas secções do relatório após os eventos Open e Activate do relatório e antes dos eventos Close ou Deactivate do relatório:
Abrir (relatório) Ativar (relatório) formato de (secção de relatório) Imprimir (secção de relatório) Fechar (relatório) Desativar (relatório)
Segurança Pode utilizar a Vista de Relatório para ativar a filtragem de relatórios por parte do utilizador. No entanto, ao contrário da Pré-visualização, os eventos Formatar e Imprimir em qualquer secção não ocorrem na Vista de Relatório. Isto também se aplica aos resultados da função VBA e aos procedimentos definidos pelo utilizador que são apresentados nos controlos (como legendas de etiquetas, estado de apresentação, formatação condicional, redimensionamento de controlos, etc.) nesses eventos. Por conseguinte, não utilize código neste evento para formatar, ocultar ou imprimir dados confidenciais, que podem ficar expostos. Recomendamos que filtre previamente os dados ou desative a Pré-visualização do Relatório ao definir a propriedade AllowReportView como Não.
Para além disso, os seguintes eventos podem ocorrer durante ou após a formatação, mas antes do evento Print:
-
O evento Retreat ocorre quando o Access regressa a uma secção anterior durante a formatação do relatório.
-
O evento NoData ocorre se não existirem registos apresentados pelo relatório.
-
O evento Page ocorre após a formatação, mas antes da impressão. Pode utilizar este evento para personalizar o aspeto do relatório impresso.