Instrução Event

Declara um evento definido pelo usuário.

[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname[(parameterlist)] _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname As delegatename _
[ Implements implementslist ]
' -or-
 [ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Custom Event eventname As delegatename _
[ Implements implementslist ]
   [ <attrlist> ] AddHandler(ByVal value As delegatename)
      [ statements ]
   End AddHandler
   [ <attrlist> ] RemoveHandler(ByVal value As delegatename)
      [ statements ]
   End RemoveHandler
   [ <attrlist> ] RaiseEvent(delegatesignature)
      [ statements ]
   End RaiseEvent
End Event

Partes

Parte

Descrição

attrlist

Opcional. Lista de atributos que se aplicam a este evento. Diversos parâmetros são separados por vírgulas. Você delimitar a Lista de atributos (Visual Basic) entre colchetes ("<" e ">").

accessmodifier

Opcional. Especifica qual código pode acessar o evento. Pode ser um dos seguintes:

  • Public - qualquer código que pode acessar o elemento que declara isso pode acessar.

  • Protegido — apenas código dentro de sua classe ou um classe derivada pode acessá-lo.

  • Friend— apenas código no mesmo conjunto pode acessá-lo.

  • Private—apenas código no mesmo elemento que o declara pode acessá-lo.

Você pode especificar Protected Friend para ativar o acesso do código de classe do evento, uma classe derivada ou o mesmo conjunto.

Shared

Opcional. Especifica que este evento é associado com uma instância específica de uma classe ou estrutura.

Shadows

Opcional. Indica que este evento redeclara e oculta com nomes idênticos um elemento de programação, ou conjunto de elementos sobrecarregados, numa classe base. Você pode sombrear qualquer tipo de elemento declarado com qualquer outro tipo.

Um elemento sombreado não está disponível dentro da classe derivada que o sombreia, com exceção de onde o elemento sombreamento é inacessível. Por exemplo, se um elemento Private sombreia um elemento da classe base, o código que não possui permissão para acessar o elemento Private acessa o elemento da classe base em vez disso.

eventname

Obrigatório. Nome do evento; segue convenções de nomenclatura de variável padrão.

parameterlist

Opcional. Lista de locais variáveis que representam os parâmetros desse evento. Você deverá colocar o Lista de parâmetros (Visual Basic) entre parênteses.

Implements

Opcional. Indica que este evento implementa um evento de uma interface.

implementslist

Necessário se Implements é fornecido. Lista de procedimentos Sub que serão implementados Diversos parâmetros são separados por vírgulas.

implementedprocedure [, implementedprocedure... ]

Cada implementedprocedure possui a seguinte sintaxe e partes:

interface.definedname

Parte

Descrição

interface

Obrigatório. Nome de uma interface que a classe continente desse procedimento ou estrutura está implementando.

definedname

Obrigatório. Nome pelo qual o procedimento é definido em interface. Isso não precisa ser o mesmo que name,o nome que está usando este procedimento para implementar o procedimento definido.

Custom

Obrigatório. Eventos declarados como Custom devem definir acessores AddHandler, RemoveHandler e RaiseEvent personalizados.

delegatename

Opcional. O nome de um delegado que especifica a assinatura de manipulador de eventos.

AddHandler

Obrigatório. Declara um acessador AddHandler,que especifica as instruções para executar quando um manipulador de eventos é adicionado, explicitamente usando a instrução AddHandler ou implicitamente, usando a cláusula Handles.

End AddHandler

Obrigatório. Encerra o bloco AddHandler.

value

Obrigatório. Nomes de parâmetro

RemoveHandler

Obrigatório. Declara um acessador RemoveHandler,que especifica as instruções para executar quando um manipulador de eventos for removido usando a instrução RemoveHandler.

End RemoveHandler

Obrigatório. Encerra o bloco RemoveHandler.

RaiseEvent

Obrigatório. Declara um acessador RaiseEvent,que especifica as instruções para executar quando o evento é gerado usando a instrução RaiseEvent. Normalmente, isso invoca uma lista dos representantes mantido por acessadores. AddHandler e RemoveHandler.

End RaiseEvent

Obrigatório. Encerra o bloco RaiseEvent.

delegatesignature

Obrigatório. Lista de parâmetros que corresponde aos parâmetros exigidos pelo delegado delegatename. Você deverá colocar o Lista de parâmetros (Visual Basic) entre parênteses.

statements

Opcional. As instruções que contêm o corpo dos métodos AddHandler, RemoveHandler e RaiseEvent .

End Event

Obrigatório. Encerra o bloco Event.

Comentários

Depois que o evento foi declarado, use a instrução RaiseEvent para levantar o evento. Um evento típico pode ser declarado e levantado conforme os seguintes fragmentos:

Public Class EventSource
    ' Declare an event. 
    Public Event LogonCompleted(ByVal UserName As String)
    Sub CauseEvent()
        ' Raise an event on successful logon. 
        RaiseEvent LogonCompleted("AustinSteele")
    End Sub 
End Class

Dica

Você pode declarar argumentos de eventos da mesma maneira que faz argumentos dos procedimentos, com as seguintes exceções: eventos não podem ter argumentos nomeados, ParamArray ou Optional.Eventos não têm valores de retorno.

Para manipular um evento, você deve associá-lo com um manipulador de eventos sub-rotina usando a instrução Handles ou AddHandler. As assinaturas de sub-rotina e o evento devem coincidir. Para manipular um evento compartilhado, você deve usar a instrução AddHandler.

Você pode usar Event somente no nível de módulo. Isso significa que o contexto da declaração para um evento deve ser uma classe, estrutura, módulo, procedimento ou interface, e não pode ser um arquivo fonte, namespace, procedimento ou bloco. Para obter mais informações, consulte Contextos de declaração e níveis de acesso padrão (Visual Basic).

Na maioria das circunstâncias, você pode usar a primeira sintaxe na seção Sintaxe deste tópico para declarar eventos. No entanto, alguns cenários requerem que você tenha mais controle sobre o comportamento detalhado de evento. A última sintaxe na seção Sintaxe neste tópico, que usa a palavra-chave Custom , fornece esse controle permitindo que você defina eventos personalizados. Em um evento personalizado, você especifica exatamente o que ocorre quando o código adiciona ou remove um manipulador de eventos para ou a partir do evento, ou quando o código gera o evento. Para exemplos, veja Como declarar eventos personalizados para conservar memória (Visual Basic) e Como declarar eventos personalizados para evitar bloqueio (Visual Basic).

Exemplo

O exemplo a seguir usa os eventos com a contagem regressiva de segundos de 10 a 0. O código ilustra vários dos métodos relacionados a eventos, propriedades e instruções. Isso inclui a instrução RaiseEvent.

A classe que gera um evento é a origem de evento, e os métodos que processam o evento são os manipuladores de eventos. Uma fonte de eventos pode ter vários manipuladores para eventos que ela gera. Quando a classe gera o evento, esse evento é gerado em cada classe que decidiu manipular eventos para essa instância do objeto.

O exemplo também usa um formulário (Form1) com um botão (Button1) e um caixa de texto (TextBox1). Quando você clica no botão, a primeira caixa de texto exibe uma contagem regressiva de 10 para 0 segundos. Quando o tempo total (10 segundos) tiver decorrido, a primeira caixa de texto exibe "Concluído".

O código Form1 especifica os estados do formulário inicial e de terminal. Ele também contém o código executado quando os eventos são gerados.

Para usar esse exemplo, abra um novo projeto Formulários do Windows. Em seguida, adicione um botão chamado Button1 e um caixa de texto chamado TextBox1 ao formulário principal, chamado Form1. Em seguida, clique com o botão direito do mouse no formulário e clique em Exibir código para abrir a editor de códigos.

Adicione uma variável WithEvents à seção declarações da classe Form1:

Private WithEvents mText As TimerState

Adicione o seguinte código para o evento Form1 . Substituir qualquer procedimentos duplicados que podem existir, como Form_Load ou Button_Click.

Private Sub Form1_Load() Handles MyBase.Load
    Button1.Text = "Start"
    mText = New TimerState
End Sub 
Private Sub Button1_Click() Handles Button1.Click
    mText.StartCountdown(10.0, 0.1)
End Sub 

Private Sub mText_ChangeText() Handles mText.Finished
    TextBox1.Text = "Done" 
End Sub 

Private Sub mText_UpdateTime(ByVal Countdown As Double
  ) Handles mText.UpdateTime

    TextBox1.Text = Format(Countdown, "##0.0")
    ' Use DoEvents to allow the display to refresh.
    My.Application.DoEvents()
End Sub 

Class TimerState
    Public Event UpdateTime(ByVal Countdown As Double)
    Public Event Finished()
    Public Sub StartCountdown(ByVal Duration As Double, 
                              ByVal Increment As Double)
        Dim Start As Double = DateAndTime.Timer
        Dim ElapsedTime As Double = 0

        Dim SoFar As Double = 0
        Do While ElapsedTime < Duration
            If ElapsedTime > SoFar + Increment Then
                SoFar += Increment
                RaiseEvent UpdateTime(Duration - SoFar)
            End If
            ElapsedTime = DateAndTime.Timer - Start
        Loop 
        RaiseEvent Finished()
    End Sub 
End Class

Pressione F5 para executar o exemplo anterior e clique no botão rotulado como Iniciar . A primeira caixa de texto inicia a contagem regressiva de segundos. Quando o tempo total (10 segundos) tiver decorrido, a primeira caixa de texto exibe "Concluído".

Dica

O método My.Application.DoEvents não processa os eventos exatamente na mesma forma como faz o formulário.Para habilitar o formulário para manipular os eventos diretamente, você pode usar multithreading.Para obter mais informações, consulte Threading (C# e Visual Basic).

Consulte também

Tarefas

Como declarar eventos personalizados para conservar memória (Visual Basic)

Como declarar eventos personalizados para evitar bloqueio (Visual Basic)

Referência

Instrução RaiseEvent

Instrução Implements

Instrução AddHandler

Instrução RemoveHandler

Cláusula Handles (Visual Basic)

Instrução Delegate

Compartilhado (Visual Basic)

Sombras (Visual Basic)

Outros recursos

Eventos (Visual Basic)