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.
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 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 de Aplicativo do Windows, 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.
Private WithEvents mText As TimerState
Exemplo 2
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
.
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() 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 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 exatamente da mesma maneira que o formulário. Para permitir que o formulário manipule os eventos diretamente, você pode usar o multithreading. Para obter mais informações, consulte Managed Threading.