イベントおよびイベント処理 (Visual Basic 6.0 ユーザー向け)

更新 : 2007 年 11 月

Visual Basic 6.0 のイベントやイベント処理に慣れていると、Visual Basic 2008 のイベント モデルは最初は複雑に見えることもありますが、Visual Basic 6.0 よりも簡単であると同時に大幅に強化されています。

概念の違い

Visual Basic 6.0 では、イベントが特定のオブジェクトに結び付けられ、個別のオブジェクトにイベント処理コードが用意されています。たとえば、ボタンとメニューがあるフォーム上では、それぞれが個別の Click イベントを保持しています。このため、両者がまったく同じ機能を実行する場合でも、イベント ハンドラに別個にコードを記述する必要があります。

' Visual Basic 6.0 
Private Sub HelpButton_Click()
    HelpButton.Caption = "Help me!"
End Sub
Private Sub HelpMenu_Click()
    HelpMenu.Caption = "Help me!"
End Sub

Visual Basic 2008 では、イベントはデリゲートを介してイベント ハンドラに結び付けられます。したがって、複数のオブジェクトがある場合でも 1 つのイベント ハンドラを作成するだけで済みます。

Private Sub HelpButton_Click(ByVal sender As Object, ByVal e As _
System.EventArgs) Handles HelpButton.Click, HelpMenu.Click
    sender.Text = "Help me!"
End Sub

上記の例では、処理するイベント (この例では HelpButton オブジェクトと HelpMenu オブジェクトの Click イベント) をイベント宣言内の Handles 句で定義しています。オブジェクトとイベントが同じ型である必要はありません。たとえば、ボタンの Click イベント、テキスト ボックスの DoubleClick イベント、およびタイマの Tick イベントを 1 つのイベント ハンドラで処理できます。

また、イベント宣言には ByVal sender As Object パラメータおよび ByVal e As System.EventArgs パラメータを指定することもできます。最初のパラメータ sender は、イベントを発生させたオブジェクトへの参照を示します。2 番目のパラメータ e では、処理されるイベントに応じた特定のオブジェクトを渡します。このオブジェクトのプロパティ (場合によってはメソッド) を参照すると、マウス イベントのマウスの位置や、ドラッグ アンド ドロップ イベントで転送されるデータなどの情報を取得できます。

以下のコード例では、MouseDown イベント ハンドラで sender パラメータを使用して、イベント生成元のオブジェクトの型を確認しています。オブジェクトが PictureBox の場合、e パラメータを使用して、クリックされた位置にラベルを移動します。このコードを複製するには、2 つの PictureBox コントロールと 1 つの Label コントロールをフォームに追加します。

Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown, _
PictureBox1.MouseDown, PictureBox2.MouseDown

    If TypeOf sender Is PictureBox Then
        Label1.Location = sender.Location + e.Location
    Else
        MsgBox("Please click a picture")
    End If
End Sub

通常、イベントごとに生成されるイベント ハンドラでは、2 番目に指定されるイベント オブジェクトの種類がそれぞれ異なります。MouseDown イベントや MouseUp イベントなどのイベント ハンドラでは、2 番目のパラメータは同じ MouseEventArgs オブジェクト型です。この種類のイベントでは、同じイベント ハンドラを使用して両方のイベントを処理できます。

複数のイベント オブジェクト型を渡すイベントの場合は、複数のイベント ハンドラを作成する必要があります。たとえば、TextBox コントロールの TextChanged イベントは、汎用の EventArgs イベント オブジェクトを渡しますが、MouseDown イベントは、それよりも特殊化された MouseEventArgs イベント オブジェクトを渡します。MouseEventArgs オブジェクトには、Button などのマウス イベント固有プロパティがあり、これらを使用してどのマウス ボタンが押されたのかを確認します。このようなプロパティは TextBox コントロールには適用されないので、参照しようとするとエラーが発生します。

イベント処理の概念上の違いに加え、Visual Basic 2008 では、さまざまなオブジェクトの一部のイベントの名前と動作が異なります。詳細については、「Windows フォーム コントロール (Visual Basic 6.0 ユーザー向け)」を参照してください。

参照

概念

イベント ハンドラの概要 (Windows フォーム)

その他の技術情報

Windows フォーム内でのイベント ハンドラの作成