コントロール イベントの処理方法 (Windows フォーム .NET)

コントロール (およびフォーム) のイベントは、通常、Windows フォーム用の Visual Studio ビジュアル デザイナーを使用して設定されます。 ビジュアル デザイナーを使用したイベントの設定は、デザイン時のイベントの処理と呼ばれます。 また、コードでイベントを動的に処理することもできます (実行時のイベントの処理と呼ばれる)。 実行時に作成されるイベントを使用すると、アプリで現在行われている内容に基づいて、イベント ハンドラーを動的に接続できます。

重要

.NET 7 と .NET 6 用のデスクトップ ガイド ドキュメントは作成中です。

イベントを処理する - デザイナー

Visual Studio で、ビジュアル デザイナーを使用して、コントロール イベントのハンドラーを管理します。 ビジュアル デザイナーによってハンドラー コードが生成され、自動的にイベントに追加されます。

ハンドラーを設定する

[プロパティ] ペインを使用して、イベントのハンドラーを追加または設定します。

  1. 変更するコントロールを含むフォームのビジュアル デザイナーを開きます。

  2. コントロールを選択します。

  3. イベント ボタン () を押して、[プロパティ] ペイン モードを [イベント] に変更します。

  4. ハンドラーを追加するイベント (Click イベントなど) を見つけます。

    Visual Studio properties pane shown with the events mode enabled and the click event.

  5. 次のいずれかの操作を行います。

    • イベントをダブルクリックして、新しいハンドラーを生成します。ハンドラーが割り当てられていない場合は空白になります。 空白でない場合は、この操作によりフォームのコードが開き、既存のハンドラーに移動します。

    • 選択ボックス () を使用して、既存のハンドラーを選びます。

      選択ボックスには、イベント ハンドラーの互換性のあるメソッド シグネチャを持つすべてのメソッドが一覧表示されます。

ハンドラーをクリアする

フォームの分離コード ファイルにあるハンドラー コードを削除するだけでは、イベント ハンドラーを削除することはできず、イベントで引き続き参照されます。 [プロパティ] ペインを使用して、イベントのハンドラーを削除します。

  1. 変更するコントロールを含むフォームのビジュアル デザイナーを開きます。

  2. コントロールを選択します。

  3. イベント ボタン () を押して、[プロパティ] ペイン モードを [イベント] に変更します。

  4. 削除するハンドラーを含むイベント (Click イベントなど) を見つけます。

    Visual Studio properties pane shown with the events mode enabled and the click event.

  5. イベントを右クリックし、 [リセット] を選択します。

イベントを処理する - コード

通常、ビジュアル デザイナーを使用して、デザイン時にコントロールにイベント ハンドラーを追加します。 しかし、実行時にコントロールを作成することはできます。その場合、コードにイベント ハンドラーを追加する必要があります。 また、コードにハンドラーを追加すると、同じイベントに複数のハンドラーを追加できます。

ハンドラーを追加する

次の例では、コントロールを作成し、イベント ハンドラーを追加する方法を示します。 このコントロールは、Button.Click イベント ハンドラー (別のボタン) に作成されます。 Button1 が押された場合は、 コードで新しいボタンの移動およびサイズ変更が行われます。 新しいボタンの Click イベントは、MyNewButton_Click メソッドによって処理されます。 新しいボタンを表示するために、フォームの Controls コレクションに追加されます。 Button1.Click イベントのハンドラーを削除するコードもあります。これについては、「ハンドラーを削除する」セクションで説明します。

private void button1_Click(object sender, EventArgs e)
{
    // Create and add the button
    Button myNewButton = new()
    {
        Location = new Point(10, 10),
        Size = new Size(120, 25),
        Text = "Do work"
    };

    // Handle the Click event for the new button
    myNewButton.Click += MyNewButton_Click;
    this.Controls.Add(myNewButton);

    // Remove this button handler so the user cannot do this twice
    button1.Click -= button1_Click;
}

private void MyNewButton_Click(object sender, EventArgs e)
{
    
}
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    'Create and add the button
    Dim myNewButton As New Button() With {.Location = New Point(10, 10),
                                          .Size = New Size(120, 25),
                                          .Text = "Do work"}

    'Handle the Click event for the new button
    AddHandler myNewButton.Click, AddressOf MyNewButton_Click
    Me.Controls.Add(myNewButton)

    'Remove this button handler so the user cannot do this twice
    RemoveHandler Button1.Click, AddressOf Button1_Click
End Sub

Private Sub MyNewButton_Click(sender As Object, e As EventArgs)

End Sub

このコードを実行するには、Visual Studio ビジュアル デザイナーを使用してフォームに対して次の操作を行います。

  1. フォームに新しいボタンを追加し、Button1 という名前を付けます。
  2. イベント ボタン () を押して、[プロパティ] ペイン モードを [イベント] に変更します。
  3. Click イベントをダブルクリックしてハンドラーを生成します。 この操作により、コード ウィンドウが開き、空の Button1_Click メソッドが生成されます。
  4. メソッド コードを上記の前のコードに置き換えます。

C# イベントの詳細については、イベント (C#) に関するページを参照してください。Visual Basic イベントの詳細については、「イベント (Visual Basic)」を参照してください

ハンドラーを削除する

ハンドラーを追加する」セクションでは、ハンドラーの追加を示すコードを使用しました。 そのコードには、ハンドラーを削除する呼び出しも含まれていました。

button1.Click -= button1_Click;
RemoveHandler Button1.Click, AddressOf Button1_Click

この構文は、任意のイベントから任意のイベント ハンドラーを削除するために使用できます。

C# イベントの詳細については、イベント (C#) に関するページを参照してください。Visual Basic イベントの詳細については、「イベント (Visual Basic)」を参照してください

同じハンドラーで複数のイベントを使用する方法

Visual Studio ビジュアル デザイナーの [プロパティ] ペインで、別のイベントで既に使用されているのと同じハンドラーを選択できます。 「ハンドラーを設定する」セクションの指示に従って、新しいハンドラーを作成する代わりに既存のものを選択します。

C# では、ハンドラーはフォームのデザイナー コード内のコントロールのイベントにアタッチされ、ビジュアル デザイナーを使用して変更されます。 C# イベントの詳細については、イベント (C#) に関するページを参照してください

Visual Basic

Visual Basic では、ハンドラーはフォームの分離コード ファイル内のコントロールのイベントにアタッチされ、そこでイベント ハンドラー コードが宣言されます。 複数の Handles キーワードをイベント ハンドラー コードに追加して、複数のイベントで使用できます。 ビジュアル デザイナーによって自動的に Handles キーワードが生成され、イベント ハンドラーに追加されます。 しかし、ハンドラー メソッドのシグネチャがイベントと一致する限り、任意のコントロールのイベントおよびイベント ハンドラーに対して、これを自分で簡単に行うことができます。 Visual Basic イベントの詳細については、「イベント (Visual Basic)」を参照してください

このコードでは、2 つの異なる Button.Click イベントのハンドラーとして同じメソッドを使用する方法を示しています。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click
    'Do some work to handle the events
End Sub

こちらもご覧ください