Compartilhar via


Declaração de evento

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 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 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 implementadosDiversos parâmetros são separados por vírgulas.

implementedprocedure [, implementedprocedure...]

Cada implementedprocedure possui a seguinte sintaxe e partes:

interface.definedname

Parte Descrição
interfaceObrigatório.Nome de uma interface que a classe continente desse procedimento ou estrutura está implementando.
definednameObrigató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 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
Observação:

Você pode declarar argumentos evento da mesma maneira que faz argumentos de procedimentos, com as seguintes exceções: eventos não podem ter argumentos, nomeados ParamArray argumentos, ou Optional argumentos. 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 Declaração de contextos e níveis de acesso padrão.

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 os eventos que conservar o uso de memória e Como: Declarar os eventos que evitar bloqueio.

Exemplo

O exemplo a seguir utiliza os eventos com a contagem regressiva 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(ByVal sender As Object, _
                       ByVal e As System.EventArgs) _
                       Handles MyBase.Load
    Button1.Text = "Start"
    mText = New TimerState
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) _
                          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".

Observação:

O My.Application.DoEvents método não processa os eventos da mesma maneira que faz o formulário. Para habilitar o formulário para manipular os eventos diretamente, você pode usar multithreading.Para obter mais informações, consulte Multithreading no Visual Basic.

Consulte também

Tarefas

Como: Adicionar eventos em uma classe

Como: Declarar os eventos que conservar o uso de memória

Como: Declarar os eventos que evitar bloqueio

Referência

demonstrativo RaiseEvent

Implementa Declaração

AddHandler demonstrativo

Instrução RemoveHandler

Trata

Instrução Delegate

Compartilhamento (Visual Basic)

Sombras

Outros recursos

Eventos no Visual Basic