Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aciona um evento declarado no nível do módulo dentro de uma classe, formulário ou documento.
Sintaxe
RaiseEvent eventname[( argumentlist )]
Partes
eventname
Obrigatório Nome do evento a ser acionado.
argumentlist
Opcional. Lista delimitada por vírgulas de variáveis, matrizes ou expressões. O argumentlist argumento deve ser colocado entre parênteses. Se não houver argumentos, os parênteses devem ser omitidos.
Observações
O necessário eventname é o nome de um evento declarado dentro do módulo. Ele segue as convenções de nomenclatura de variáveis do Visual Basic.
Se o evento não tiver sido declarado dentro do módulo no qual ele é gerado, ocorrerá um erro. O fragmento de código a seguir ilustra uma declaração de evento e um procedimento no qual o evento é gerado.
' Declare an event at module level.
Event LogonCompleted(ByVal UserName As String)
Sub Logon(ByVal UserName As String)
' Raise the event.
RaiseEvent LogonCompleted(UserName)
End Sub
Você não pode usar RaiseEvent para gerar eventos que não são explicitamente declarados no módulo. Por exemplo, todos os formulários herdam um Click evento de System.Windows.Forms.Form, ele não pode ser gerado usando RaiseEvent em um formulário derivado. Se você declarar um Click evento no módulo de formulário, ele sombreará o próprio Click evento do formulário. Você ainda pode invocar o evento do Click formulário chamando o OnClick método.
Por padrão, um evento definido no Visual Basic gera seus manipuladores de eventos na ordem em que as conexões são estabelecidas. Como os eventos podem ter ByRef parâmetros, um processo que se conecta tardiamente pode receber parâmetros que foram alterados por um manipulador de eventos anterior. Depois que os manipuladores de eventos são executados, o controle é retornado para a sub-rotina que gerou o evento.
Observação
Eventos não compartilhados não devem ser gerados dentro do construtor da classe na qual são declarados. Embora esses eventos não causem erros em tempo de execução, eles podem não ser capturados pelos manipuladores de eventos associados. Use o Shared modificador para criar um evento compartilhado se você precisar gerar um evento de um construtor.
Observação
Você pode alterar o comportamento padrão dos eventos definindo um evento personalizado. Para eventos personalizados, a RaiseEvent instrução invoca o acessador do RaiseEvent evento. Para obter mais informações sobre eventos personalizados, consulte Declaração de evento.
Exemplo 1
O exemplo a seguir usa eventos para contagem regressiva de segundos de 10 para 0. O código ilustra vários dos métodos, propriedades e instruções relacionados a eventos, incluindo a RaiseEvent instrução.
A classe que gera um evento é a fonte do 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 os eventos que gera. Quando a classe gera o evento, esse evento é gerado em cada classe que optou por manipular eventos para essa instância do objeto.
O exemplo demonstra um temporizador que conta de 10 a 0 segundos e exibe o progresso para o console. Quando a contagem regressiva terminar, ele exibirá "Concluído".
Declare uma WithEvents variável em sua classe para manipular eventos do temporizador:
Public Class TimerExample
Private WithEvents mTimer As TimerState
Exemplo 2
Adicione o código a seguir para implementar os manipuladores de eventos e a lógica do temporizador. Este exemplo mostra como usar a RaiseEvent instrução para notificar manipuladores de eventos quando o temporizador é atualizado ou concluído.
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
Quando você executa o exemplo anterior, ele começa a contar os segundos de 10 para 0, exibindo o progresso para o console. Quando o tempo completo (10 segundos) tiver decorrido, ele exibirá "Concluído".