Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Declara um evento definido pelo usuário.
Sintaxe
[ <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 esse evento. Vários atributos são separados por vírgulas. Você deve colocar a Lista de Atributos entre colchetes angulares ("<" e ">"). |
accessmodifier |
Opcional. Especifica qual código pode acessar o evento. Pode ser um dos seguintes: - Público – qualquer código que possa acessar o elemento que o declara pode acessá-lo. - Protegido – somente o código dentro de sua classe ou de uma classe derivada pode acessá-lo. - Friend – somente o código no mesmo assembly pode acessá-lo. - Private – somente o código no elemento que o declara pode acessá-lo. - Código somente amigo protegido na classe do evento, uma classe derivada ou o mesmo assembly pode acessá-lo. - O código somente proteção privada na classe do evento ou em uma classe derivada no mesmo assembly pode acessá-lo. |
Shared |
Opcional. Especifica que esse evento não está associado a uma instância específica de uma classe ou estrutura. |
Shadows |
Opcional. Indica que esse evento redeclara e oculta um elemento de programação nomeado de forma idêntica ou um conjunto de elementos sobrecarregados em uma classe base. Você pode sombrear qualquer tipo de elemento declarado com qualquer outro tipo. Um elemento sombreado não está disponível de dentro da classe derivada que o sombreia, exceto de onde o elemento de sombreamento está inacessível. Por exemplo, se um Private elemento sombrear um elemento de classe base, o código que não tem permissão para acessar o Private elemento acessará o elemento de classe base. |
eventname |
Obrigatório Nome do evento; segue as convenções de nomenclatura de variável padrão. |
parameterlist |
Opcional. Lista de variáveis locais que representam os parâmetros desse evento. Você deve colocar a Lista de Parâmetros entre parênteses. |
Implements |
Opcional. Indica que esse evento implementa um evento de uma interface. |
implementslist |
Obrigatório se Implements for fornecido. Lista de Sub procedimentos que estão sendo implementados. Vários procedimentos são separados por vírgulas:implementedprocedure [ , implementedprocedure ... ] Cada implementedprocedure um tem a seguinte sintaxe e partes:interface.definedname- interface -Necessário. Nome de uma interface que este procedimento contém classe ou estrutura está implementando.- Definedname -Necessário. Nome pelo qual o procedimento é definido em interface. Isso não precisa ser o mesmo nameque o nome que este procedimento está usando para implementar o procedimento definido. |
Custom |
Obrigatório Eventos declarados como Custom devem definir acessadores e RaiseEvent personalizadosAddHandlerRemoveHandler. |
delegatename |
Opcional. O nome de um delegado que especifica a assinatura do manipulador de eventos. |
AddHandler |
Obrigatório Declara um AddHandler acessador, que especifica as instruções a serem executadas quando um manipulador de eventos é adicionado explicitamente usando a AddHandler instrução ou implicitamente usando a Handles cláusula. |
End AddHandler |
Obrigatório Encerra o AddHandler bloco. |
value |
Obrigatório Nome do parâmetro. |
RemoveHandler |
Obrigatório Declara um RemoveHandler acessador, que especifica as instruções a serem executadas quando um manipulador de eventos é removido usando a RemoveHandler instrução. |
End RemoveHandler |
Obrigatório Encerra o RemoveHandler bloco. |
RaiseEvent |
Obrigatório Declara um RaiseEvent acessador, que especifica as instruções a serem executadas quando o evento é gerado usando a RaiseEvent instrução. Normalmente, isso invoca uma lista de delegados mantidos pelos acessadores e RemoveHandler pelos AddHandler acessadores. |
End RaiseEvent |
Obrigatório Encerra o RaiseEvent bloco. |
delegatesignature |
Obrigatório Lista de parâmetros que correspondem aos parâmetros exigidos pelo delegatename delegado. Você deve colocar a Lista de Parâmetros entre parênteses. |
statements |
Opcional. Instruções que contêm os corpos do AddHandler, RemoveHandlere RaiseEvent métodos. |
End Event |
Obrigatório Encerra o Event bloco. |
Observações
Depois que o evento tiver sido declarado, use a RaiseEvent instrução para gerar o evento. Um evento típico pode ser declarado e gerado conforme mostrado nos 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 de evento da mesma forma que faz argumentos de procedimentos, com as seguintes exceções: os eventos não podem ter argumentos nomeados, ParamArray argumentos ou Optional argumentos. Os eventos não têm valores retornados.
Para lidar com um evento, você deve associá-lo a uma sub-rotina do manipulador de eventos usando a instrução ou AddHandler a Handles instrução. As assinaturas da sub-rotina e do evento devem corresponder. Para lidar com um evento compartilhado, você deve usar a AddHandler instrução.
Você só pode usar Event no nível do módulo. Isso significa que o contexto de declaração de um evento deve ser uma classe, estrutura, módulo ou interface e não pode ser um arquivo de origem, namespace, procedimento ou bloco. Para obter mais informações, consulte contextos de declaração 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 exigem que você tenha mais controle sobre o comportamento detalhado do evento. A última sintaxe na seção Sintaxe deste tópico, que usa a Custom palavra-chave, 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 de ou para o evento ou quando o código gera o evento. Para obter exemplos, consulte Como declarar eventos personalizados para conservar memória e como declarar eventos personalizados para evitar bloqueios.
Exemplo
O exemplo a seguir usa eventos para contar segundos de 10 a 0. O código ilustra vários dos métodos, propriedades e instruções relacionados ao evento. Isso inclui a instrução RaiseEvent .
A classe que gera um evento é a origem do evento e os métodos que processam o evento são os manipuladores de eventos. Uma fonte de evento pode ter vários manipuladores para os eventos gerados. Quando a classe aciona o evento, esse evento é gerado em todas as classes que optaram por manipular eventos para essa instância do objeto.
O exemplo também usa um formulário (Form1) com um botão (Button1) e uma 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 integral (10 segundos) tiver decorrido, a primeira caixa de texto exibirá "Concluído".
O código para Form1 especifica os estados iniciais e terminais do formulário. Também contém o código executado quando os eventos são gerados.
Para usar este exemplo, abra um novo projeto do Windows Forms. Em seguida, adicione um botão nomeado Button1 e uma caixa de texto nomeada TextBox1 para o 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 o editor de código.
Adicione uma WithEvents variável à seção declarações da Form1 classe:
Public Class TimerExample
Private WithEvents mTimer As TimerState
Adicione o código a seguir ao código para Form1. Substitua todos os procedimentos duplicados que possam existir, como Form_Load ou Button_Click.
Public Sub StartCountdownExample()
mTimer = New TimerState()
mTimer.StartCountdown(10.0, 1.0)
End Sub
Private Sub mTimer_UpdateTime(ByVal Countdown As Double) Handles mTimer.UpdateTime
Console.WriteLine("Time remaining: " & Format(Countdown, "##0.0") & " seconds")
End Sub
Private Sub mTimer_Finished() Handles mTimer.Finished
Console.WriteLine("Done")
End Sub
End Class
Public Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim SoFar As Double = 0
Do While SoFar < Duration
System.Threading.Thread.Sleep(CInt(Increment * 1000))
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
Loop
RaiseEvent Finished()
End Sub
End Class
Pressione F5 para executar o exemplo anterior e clique no botão iniciado. A primeira caixa de texto começa a contar os segundos. Quando o tempo integral (10 segundos) tiver decorrido, a primeira caixa de texto exibirá "Concluído".
Observação
O My.Application.DoEvents método não processa eventos da mesma forma que o formulário. Para habilitar o formulário para manipular os eventos diretamente, você pode usar o multithreading. Para obter mais informações, consulte Managed Threading.