Compartilhar via


Instrução RaiseEvent

Dispara 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 disparado.

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 deverão 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ável do Visual Basic.

Se o evento não tiver sido declarado no módulo em que é gerado, ocorre 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 declarados explicitamente no módulo. Por exemplo, todos os formulários herdam um Click evento do System.Windows.Forms.Formqual 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 com atraso pode receber parâmetros que foram alterados por um manipulador de eventos anterior. Após a execução dos manipuladores de eventos, 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 por manipuladores de eventos associados. Use o Shared modificador para criar um evento compartilhado se 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 a Instrução de Evento.

Exemplo 1

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, incluindo a RaiseEvent instrução.

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 demonstra um temporizador que conta de 10 a 0 segundos e exibe o progresso para o console. Quando a contagem regressiva for concluída, ela 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 os manipuladores de eventos quando o temporizador for 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 integral (10 segundos) tiver decorrido, ele exibirá "Concluído".

Consulte também