Eventos (Visual Basic)
Enquanto você pode visualizar um projeto Visual Studio como uma série de procedimentos que executam em uma sequência, na realidade, a maioria dos programas são orientados a eventos — o que significa que o fluxo de execução é determinado pelas externas ocorrências chamadas eventos .
Um evento é um sinal que informa a um aplicativo que algo importante ocorreu.Por exemplo, quando um usuário clica em um controle em um formulário, o formulário pode lançar um evento Click e chamar um procedimento que manipula o evento.Eventos também permitem que tarefas separadas se comuniquem.Digamos que, por exemplo, seu aplicativo execute uma tarefa de classificação separadamente do aplicativo principal.Se um usuário cancelar a classificação, o aplicativo pode enviar um evento Cancelar instruindo o processo de classificação para parar.
Termos e Conceitos de Evento
Esta seção descreve os termos e conceitos usados com eventos em Visual Basic.
Declarando Eventos
Você declara eventos dentro de classes, estruturas, módulos e interfaces usando a palavra-chave Event, como no exemplo a seguir:
Event AnEvent(ByVal EventNumber As Integer)
Disparando Eventos
Um evento é como uma mensagem anunciando que algo importante ocorreu.O ato de transmitir a mensagem é chamado Disparo de evento.Em Visual Basic,você dispara eventos com a instrução RaiseEvent, como no exemplo a seguir:
RaiseEvent AnEvent(EventNumber)
Eventos devem ser disparados dentro do escopo da classe, módulo ou estrutura onde eles são declarados.Por exemplo, um classe derivada não pode disparar eventos herdados de um classe base.
Remetentes de Evento
Qualquer objeto capaz de dispara um evento é um Remetente de Evento ,também conhecido como uma fonte de evento .Formulários, controles e objetos definidos pelo usuário são exemplos de remetentes de eventos.
Manipuladores de Eventos
Manipuladores de eventos são procedimentos que são chamados quando ocorre um evento correspondente.Você pode usar qualquer sub-rotina válida com uma assinatura correspondente como um manipulador de eventos.Entretanto, você não pode usar uma função como um manipulador de eventos, porque ela não retorna um valor para a fonte de eventos.
Visual Basic usa uma convenção de nomeclatura padrão para manipuladores de eventos que combina o nome do remetente do evento, um sublinhado e o nome do evento.Por exemplo, o evento Click de um botão chamado button1 será nomeado Sub button1_Click.
Observação |
---|
Recomendamos que você use esta convenção de nomeclatura quando definir manipuladores de eventos para seus próprios eventos, mas ela não é necessário; você pode usar qualquer nome de sub-rotina válido. |
Associando Eventos Manipuladores de Eventos
Antes uma manipulador de eventos se tornar útil, você deve primeiro associá-lo com um evento usando uma instrução Handles ou AddHandler.
WithEvents e Cláusula Handles
A instrução WithEvents e a cláusula Handles fornecem uma maneira declarativa de especificar os manipuladores de eventos.Um evento gerado por um objeto declarado com a palavra-chave WithEvents pode ser tratado por qualquer procedimento com uma instrução Handles para esse evento, conforme mostrado no exemplo o seguir:
' Declare a WithEvents variable.
Dim WithEvents EClass As New EventClass
' Call the method that raises the object's events.
Sub TestEvents()
EClass.RaiseEvents()
End Sub
' Declare an event handler that handles multiple events.
Sub EClass_EventHandler() Handles EClass.XEvent, EClass.YEvent
MsgBox("Received Event.")
End Sub
Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
A instrução WithEvents e a cláusula Handles geralmente são a melhor opção para manipuladores de eventos pois a sintaxe declarativa usada torna mais fácil de codificar, ler e depurar a manipulação de eventos.No entanto, esteja ciente das seguintes limitações sobre o uso de variáveis WithEvents:
Não é possível usar uma variável WithEvents como um variável de objeto.Ou seja, você não pode declará-la como Object — você deve especificar o nome da classe quando você declarar a variável.
Porque compartilhado eventosnão são vinculado às ocorrências da classe, não é possível usar WithEvents declarativamente manipular eventos compartilhados.Da mesma forma, você não pode usar WithEvents ou Handles para manipular eventos de um Structure.Em ambos os casos, você pode usar a instrução AddHandler para manipular esses eventos.
Não é possível criar matrizes de WithEvents variáveis.
WithEvents variáveis permitem a um único manipulador de eventos manipular um ou mais tipo de evento, ou um ou mais manipuladores de eventos para manipular o mesmo tipo de evento.
Embora a cláusula Handles seja a maneira padrão de associar um manipulador de eventos com um evento, é limitada ao associar eventos com manipuladores de eventos em tempo de compilação.
Em alguns casos, como com os eventos associados com os formulários ou controles, Visual Basic automaticamente extingue um manipulador de eventos em branco e o associa com um evento.Por exemplo, quando você clica duas vezes em um botão de comando em um formulário no modo de design, Visual Basic cria um manipulador de eventos em branco e uma variável WithEvents para o botão de comando, como no código a seguir:
Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click() Handles Button1.Click
End Sub
AddHandler e RemoveHandler
A instrução AddHandler é semelhante à cláusula Handles já que ambas permitem que você especifique um manipulador de eventos.Entretanto, AddHandler usado com RemoveHandler, fornece flexibilidade maior do que a cláusula Handles, permitindo que você adicione, remova e altere dinamicamente o manipulador de evento associado com um evento.Se você quiser manipular eventos compartilhados ou eventos de uma estrutura, você deve usar AddHandler.
AddHandler necessita de dois argumentos: o nome de um evento a partir de um gerador de evento tal como um controle, e uma expressão que avalia um representante.Você não precisa especificar explicitamente a classe representante ao usar AddHandler, desde que a declaração AddressOf sempre retorne uma referência ao representante.O exemplo a seguir associa um manipulador de evento com um evento gerado por um objeto.
AddHandler Obj.XEvent, AddressOf Me.XEventHandler
RemoveHandler, que disconecta um evento de um manipulador de eventos, usa a mesma sintaxe de AddHandler.Por exemplo:
RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler
No exemplo a seguir, um manipulador de eventos está associado um evento e o evento é gerado.O manipulador de eventos captura o evento e exibe uma mensagem.
Em seguida, o manipulador de eventos a primeiro é removido e um manipulador de eventos diferente está associado com o evento.Quando o evento é gerado novamente, é exibida uma mensagem diferente.
Finalmente, o segundo manipulador de eventos é removido e o evento é gerado pela terceira vez.Porque não existe mais um manipulador de eventos associado ao evento, nenhuma ação é executada.
Module Module1
Sub Main()
Dim c1 As New Class1
' Associate an event handler with an event.
AddHandler c1.AnEvent, AddressOf EventHandler1
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler1
' Now associate a different event handler with the event.
AddHandler c1.AnEvent, AddressOf EventHandler2
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler2
' This event will not be handled.
c1.CauseTheEvent()
End Sub
Sub EventHandler1()
' Handle the event.
MsgBox("EventHandler1 caught event.")
End Sub
Sub EventHandler2()
' Handle the event.
MsgBox("EventHandler2 caught event.")
End Sub
Public Class Class1
' Declare an event.
Public Event AnEvent()
Sub CauseTheEvent()
' Raise an event.
RaiseEvent AnEvent()
End Sub
End Class
End Module
Manipulado Eventos Herdados de uma Classe Base
Classes derivadas– classes que herdam as características de uma classe base — podem tratar eventos originados por sua classe base usando o HandlesMyBase instrução.
Para manipular eventos de uma classe base
Declare um manipulador de eventos na classe derivada adicionando uma declaração Handles MyBase.nomedoevento na declaração de seu evento manipulador de eventos, onde nomedoevento é o nome do evento na classe base manipulada.Por exemplo:
Public Class BaseClass Public Event BaseEvent(ByVal i As Integer) ' Place methods and properties here. End Class Public Class DerivedClass Inherits BaseClass Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent ' Place code to handle events from BaseClass here. End Sub End Class
Seções relacionadas
Título |
Descrição |
---|---|
Passo a passo: Declarando e ordenando eventos (Visual Basic) |
Fornece uma descrição passo a passo de como declarar e disparar eventos para uma classe. |
Demonstra como escrever um procedimento de manipulador de eventos. |
|
Como: declarar eventos personalizados para evitar o bloqueio (Visual Basic) |
Demonstra como definir um evento personalizado que permite que seus manipuladores de evento sejam chamados assincronamente. |
Como: declarar eventos personalizados para conservar a memória (Visual Basic) |
Demonstra como definir um evento personalizado que utiliza a memória somente quando o evento é manipulado. |
Solução de problemas herdadas manipuladores de eventos em Visual Basic |
Lista problemas comuns que surgem com manipuladores evento nos componentes herdados |
Fornece uma visão geral sobre o modelo de evento no .NET Framework. |
|
Descreve como trabalhar com eventos associados aos objetos Windows Forms. |
|
Fornece uma visão geral dos delegados no Visual Basic. |