次の方法で共有


RaiseEvent ステートメント

クラス、フォーム、またはドキュメント内のモジュール レベルで宣言されたイベントをトリガーします。

構文

RaiseEvent eventname[( argumentlist )]  

部品

eventname
必須。 トリガーするイベントの名前。

argumentlist
任意。 変数、配列、または式のコンマ区切りのリスト。 argumentlist引数はかっこで囲む必要があります。 引数がない場合は、かっこを省略する必要があります。

注釈

必要な eventname は、モジュール内で宣言されたイベントの名前です。 Visual Basic 変数の名前付け規則に従います。

イベントが発生したモジュール内で、そのイベントが宣言されていない場合は、エラーが発生します。 次のコード フラグメントは、イベント宣言と、イベントが発生するプロシージャを示しています。

' 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

RaiseEventを使用して、モジュールで明示的に宣言されていないイベントを発生させることはできません。 たとえば、すべてのフォームはClickからSystem.Windows.Forms.Form イベントを継承します。派生フォームでRaiseEventを使用して発生することはできません。 フォーム モジュールで Click イベントを宣言すると、フォーム独自の Click イベントがシャドウされます。 Click メソッドを呼び出すことで、フォームのOnClick イベントを引き続き呼び出すことができます。

既定では、Visual Basic で定義されているイベントは、接続が確立された順序でイベント ハンドラーを発生させます。 イベントには ByRef パラメーターを含めることができるため、遅延接続するプロセスは、以前のイベント ハンドラーによって変更されたパラメーターを受け取る場合があります。 イベント ハンドラーの実行後、イベントを発生させたサブルーチンに制御が返されます。

非共有イベントは、宣言されているクラスのコンストラクター内で発生させるべきではありません。 このようなイベントは実行時エラーを引き起こしませんが、関連するイベント ハンドラーによってキャッチできない可能性があります。 コンストラクターからイベントを発生させる必要がある場合は、 Shared 修飾子を使用して共有イベントを作成します。

カスタム イベントを定義することで、イベントの既定の動作を変更できます。 カスタム イベントの場合、 RaiseEvent ステートメントはイベントの RaiseEvent アクセサーを呼び出します。 カスタム イベントの詳細については、「 イベント ステートメント」を参照してください。

例 1

次の例では、イベントを使用して、秒を 10 から 0 にカウントダウンします。 このコードは、 RaiseEvent ステートメントを含む、イベント関連のメソッド、プロパティ、ステートメントをいくつか示しています。

イベントを発生させるクラスはイベント ソースであり、イベントを処理するメソッドはイベント ハンドラーです。 イベント ソースには、生成するイベントに対して複数のハンドラーを使用できます。 クラスがイベントを発生させると、そのイベントは、オブジェクトのそのインスタンスのイベントを処理するように選択されたすべてのクラスで発生します。

この例では、10 秒から 0 秒までカウントダウンし、進行状況をコンソールに表示するタイマーを示します。 カウントダウンが完了すると、"完了" と表示されます。

タイマーからのイベントを処理する WithEvents 変数をクラスで宣言します。

Public Class TimerExample
    Private WithEvents mTimer As TimerState

例 2

イベント ハンドラーとタイマー ロジックを実装する次のコードを追加します。 この例では、 RaiseEvent ステートメントを使用して、タイマーが更新または完了したときにイベント ハンドラーに通知する方法を示します。

    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

前の例を実行すると、10 秒から 0 秒のカウントダウンが開始され、進行状況がコンソールに表示されます。 完全時間 (10 秒) が経過すると、"完了" と表示されます。

こちらも参照ください