Uma única ação, como mover de um controlo num objeto para outro, 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
- Ordem de eventos para registos em formulários
- Ordem de eventos para formulário e subformulários
- Ordem de eventos para batimentos de teclas e cliques do rato
- Ordem de eventos para relatórios e secções de relatórios
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:
Enter
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:
Open (form)
Activate (form)
Current (form)
Enter (control)
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:
Seta de saída
, 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:
Seta Exit (controlo)
Seta LostFocus (controlo)
Descarregar (formulário)
Desativar (formulário)
(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:
Seta BeforeUpdate
AfterUpdate
Os eventos Exit e LostFocus de um controlo cujo valor é alterado ocorrem após os eventos BeforeUpdate e AfterUpdate:
Seta AntesDeAtualizar
DepoisDeAtualizar, Seta Sair
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:
Tecla Seta para
Tecla de setaPremir
suja Seta Alterar
Up
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 como Sim, o evento Error para o formulário ocorre imediatamente após o evento NotInList :
Seta para Baixo
Seta
premida Seta suja Seta Alterar
Seta para
NãoInLista
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 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) Seta 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:
Seta BeforeUpdate (formulário
)
AfterUpdate (formulário) Seta Exit (controlo)
LostFocus (controlo)
(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)
Seta GotFocus (controlo)
BeforeUpdate (
controlo) Depois de Atualizar (controlo) - Move o foco para outro controlo:
Seta Exit (control1
) LostFocus (controlo1)
Enter (controlo2)
(controlo2) - Move o foco para outro registo:
Seta BeforeUpdate (formulário)
AfterUpdate (formulário
) Seta Exit (controlo2)
LostFocus (controlo2)
(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:
Delete
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)
(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:
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:
Seta de 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:
Seta 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
Carregar (formulário)
Redimensionar (formulário)
Ativar (formulário)
atual (formulário)
(controlo)
GotFocus (controlo)
De forma semelhante, quando fecha um formulário, ocorre a seguinte sequência de eventos:
Seta Exit (controlo)
Seta LostFocus (controlo)
Descarregar (formulário)
Desativar (formulário)
(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 você pressiona e solta uma tecla enquanto um controle em um formulário tem o foco (ou usa a ação ou instrução SendKeys para enviar um pressionamento de teclas), ocorre a seguinte sequência de eventos:
Tecla Seta para baixo
Premir
Tecla para cima
Quando você pressiona e solta uma tecla ou envia um pressionamento de tecla no conjunto de caracteres 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:
Seta para Baixo
Tecla de seta
Alterar
Tecla para cima
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:
Seta KeyDown
Seta BeforeUpdate,
AfterUpdate
Seta Exit
LostFocus - Segundo controlo:
Enter
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:
Seta para baixo,
MouseSeta para cima,Clique em
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:
Seta de saída
, LostFocus, - Segundo controlo:
Enter
Seta GotFocus
Seta MouseDown
Seta
para cima Clique em
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:
Seta MouseDown
Seta
para cima Clique
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:
Seta aberta
,
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:
Seta 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:
Seta Abrir (relatório)
Carregar (relatório)
Ativar (relatório)
Formatar (secção do relatório)
Imprimir (secção do relatório)
Fechar (relatório)
Desactivar (relatório)
Segurança Pode utilizar a Vista de Relatório para ativar a filtragem de relatórios por parte dos utilizadores. Mas, 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 em controlos (como legendas de etiquetas, estado de apresentação, formatação condicional, redimensionamento de controlos, etc.) dentro desses eventos. Portanto, não use código neste evento para formatar, ocultar ou imprimir dados confidenciais, que podem ficar expostos. Recomendamos a filtragem prévia dos dados ou a desativação da 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.