demonstrativo RaiseEvent
Disparadores de um evento declarado no nível de módulo dentro de uma classe, formulário ou documento.
RaiseEvent eventname[( argumentlist )]
Partes
eventname
Obrigatório.Nome do evento para acionar.argumentlist
Opcional.Lista separada por vírgulas de variáveis, matrizes ou expressões.The argumentlist argumento deve estar entre parênteses. Se não houver nenhum argumento, devem ser omitidos dos parênteses.
Comentários
O necessáriaeventname o nome de um evento é declarado dentro do módulo. Ele segue convenções de nomenclatura de variáveis de Visual Basic.
Se o evento não foi declarado no módulo no qual ele é disparado, 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
Não é possível usar RaiseEvent para eventos que não são explicitamente declarados no módulo. Por exemplo, todos os formulários herdam um Click evento a partir de System.Windows.Forms.Form, não pode ser elevada usando RaiseEvent em um formulário derivado. Se você declarar um Click evento no módulo de formulário, ele sombras próprio o formulário Click evento. Você ainda pode chamar Click evento chamando o OnClick método.
Por padrão, um evento definido no Visual Basic dispara seus manipuladores de eventos na ordem em que as conexões estabelecidas.Como evento s pode ter ByRef parâmetros, um processo que conecta-se mais tarde pode receber parâmetros que foram alterados por um anteriores evento manipulador. Depois de executar os manipuladores de eventos, o controle é devolvido ao sub-rotina que disparou o evento.
Observação: |
---|
Eventos não compartilhados não devem ser gerados dentro do construtor da classe na qual elas são declaradas.Embora esses eventos não causam erros em time de execução, eles podem não ser detectadas por manipuladores de evento associado.Use o Shared modificador para criar um evento compartilhado, caso você precise acionar um evento de um construtor. |
Você pode alterar o comportamento padrão de eventos, definindo um evento personalizado.Para eventos personalizados, a instrução RaiseEvent chama o evento do acessador RaiseEvent.Para obter mais informações sobre eventos personalizados, consulte Declaração de evento.
Exemplo
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, incluindo o RaiseEvent demonstrativo.
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 Windows aplicativo, adicione um botão denominado Button1 e uma caixa de texto denominada TextBox1 para o formulário principal, chamado Form1. Em seguida, clicar com o botão direito do mouse no formulário e clique em Exibir código para em em aberto o Editor de código.
Adicionar um WithEvents a seção Declarações de variável a Form1 classe.
Private WithEvents mText As TimerState
Adicione o seguinte código para o evento Form1 .Substitua quaisquer procedimentos duplicados que podem existir, por exemplo, 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 clicar 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 eventos exatamente da mesma forma sistema autônomo o formulário. Para permitir que o formulário manipular os eventos diretamente, você pode usar multithreading.Para obter mais informações, consulte Multithreading no Visual Basic. |
Consulte também
Tarefas
Como: Adicionar eventos em uma classe