Partilhar via


Instrução RaiseEvent

Triggers an event declared at module level within a class, form, or document.

RaiseEvent eventname[( argumentlist )]

Parts

  • eventname
    Required. Name of the event to trigger.

  • argumentlist
    Optional. Vírgula-a lista delimitada de variáveis, matrizes ou expressões. O argumentlist argumento deve estar entre parênteses. Se não houver nenhum argumento, os parênteses devem ser omitidos.

Comentários

Os eventname é o nome de um evento é declarado dentro do módulo. Ele segue as convenções de nomenclatura o Visual Basic variável .

Se o evento não foi declarada dentro do módulo no qual ele é disparado, ocorre um erro . O fragmento de código a seguir ilustra umadeclaração de eventoe 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 gerar eventos que não são explicitamente declarados no módulo. Por exemplo, todos os formulários herdam uma Clickdeevento de System.Windows.Forms.Form, não pode ser elevada usando RaiseEvent em um formuláriode derivado. Se você declarar uma Clickevento domódulodo formulário, as sombras formuláriodo próprio Clickevento. Você ainda pode chamar o formuláriodo Clickoevento chamando o OnClickmétodo.

Por padrão, um evento definido em Visual Basic dispara seus manipuladores de evento na ordem em que as conexões estabelecidas. Como os eventos podem ter ByRef parâmetros, o processo que conecta atrasado pode receber parâmetros que foram alterados por um manipulador de evento anteriores. After the event handlers execute, control is returned to the subroutine that raised the event.

ObservaçãoObservação

Não-compartilhado eventos não devem ser gerados dentro do construtor da classe em que são declaradas. Embora esses eventos não causam executar-erros de tempo, eles podem não ser detectadas por manipuladores de evento do associado. Use o Shared modificador para criar um compartilhada evento caso você precise disparar um evento de um construtor.

ObservaçãoObservação

Você pode alterar o comportamento padrão de eventos, definindo um eventode personalizado. For custom events, the RaiseEvent statement invokes the event's RaiseEvent accessor. For more information on custom events, see Declaração de evento.

Exemplo

O exemplo a seguir usa os eventos com a contagem regressiva de segundos de 10 a 0. O código ilustra vários dos evento-relacionados a métodos, propriedades e instruções, incluindo o RaiseEvent demonstrativo.

The class that raises an event is the event source, and the methods that process the event are the event handlers. An event source can have multiple handlers for the events it generates. When the class raises the event, that event is raised on every class that has elected to handle events for that instance of the object.

The example also uses a form (Form1) with a button (Button1) and a text box (TextBox1). When you click the button, the first text box displays a countdown from 10 to 0 seconds. When the full time (10 seconds) has elapsed, the first text box displays "Done".

The code for Form1 specifies the initial and terminal states of the form. It also contains the code executed when events are raised.

Para usar esse exemplo, em aberto um novo Windows Application projeto, adicione um botão denominado Button1 e caixa de texto denominada TextBox1 para o formulárioprincipal, chamado Form1. Em seguida, à direita,-, clique no formulário e clique em Exibir Código para em aberto o Editor de Código .

Adicionar um WithEventsseção declarações devariável de Form1classe.

Private WithEvents mText As TimerState

Add the following code to the code for Form1. Substituir qualquer procedimentos duplicados que podem 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 Iniciar. The first text box starts to count down the seconds. When the full time (10 seconds) has elapsed, the first text box displays "Done".

ObservaçãoObservação

The My.Application.DoEvents method does not process events in exactly the same way as the form does. Para permitir que o formulário manipular os eventos diretamente, você pode usar multithreading. For more information, see Threading (C# e Visual Basic).

Consulte também

Referência

Declaração de evento

Instrução AddHandler

Instrução RemoveHandler

Cláusula Handles (Visual Basic)

Outros recursos

Eventos (Visual Basic)