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