Share via


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

イベントとは、プログラマが応答できる、つまり、コードを使って "ハンドル (処理)" できるアクションのことです。 イベントは、マウスのクリックやキーを押すなどのユーザー アクション、プログラム コード、またはシステムによって生成されます。

イベント ドリブン アプリケーションでは、イベントに応答してコードが実行されます。 各フォームおよびコントロールは、定義済みのイベント セットを公開しており、プログラマはそれらに対応するプログラムを記述できます。 これらのイベントの 1 つが発生したときに、関連するイベント ハンドラーにコードがある場合は、そのコードが呼び出されます。

オブジェクトが発生させるイベントにはさまざまな種類がありますが、その多くがほとんどのコントロールで共通です。 たとえば、ほとんどのオブジェクトは Click イベントを処理します。 ユーザーがフォームをクリックすると、フォームの Click イベント ハンドラー内のコードが実行されます。

注意

イベントの多くは、他のイベントと共に発生します。 たとえば、DoubleClick イベントが発生する場合は、MouseDownMouseUp、および Click の各イベントが発生します。

イベントを発生させる方法および処理する方法については、「方法 : イベントを発生させる/処理する」を参照してください。 イベント ハンドラーとメソッドを関連付ける方法については、「方法 : イベント ハンドラー メソッドをイベントに接続する」を参照してください。

デリゲートとその役割

デリゲートは、主にイベント処理の機構を構築するために、.NET Framework 内で使用されるクラスです。 デリゲートは、通常 Visual C++ やその他のオブジェクト指向言語で使用される関数ポインターに似ています。 ただし、デリゲートはオブジェクト指向であり、タイプ セーフであり、さらに安全である点が、関数ポインターと異なります。 また、関数ポインターには特定の関数への参照だけが含まれていますが、デリゲートはオブジェクトへの参照、およびそのオブジェクト内の 1 つ以上のメソッドへの参照で構成されています。

このイベント モデルでは、デリゲートを使って、イベント処理に使用するメソッドにイベントを関連付けます。 デリゲートを使用すると、ハンドラーのメソッドを指定することにより、イベント通知のための他のクラスを登録できます。 イベントが発生すると、デリゲートは関連付けられたメソッドを呼び出します。 デリゲートを定義する方法の詳細については、「イベントとデリゲート」を参照してください。

デリゲートは単一のメソッドまたは複数のメソッドに関連付けることができます。後者は、マルチキャスティングと呼ばれます。 イベントのデリゲートを作成する場合は、通常、手作業または Windows フォーム デザイナーでマルチキャスト イベントを作成します。 例外は、イベントごとに複数回実行されることが論理的にあり得ないような特定のプロシージャ (ダイアログ ボックスの表示など) を呼び出すイベントです。 マルチキャスト デリゲートを作成する方法については、「方法 : デリゲートを結合する (マルチキャスト デリゲート) (C# プログラミング ガイド)」を参照してください。

マルチキャスト デリゲートは、関連付けられたメソッドの呼び出しリストを保持します。 マルチキャスト デリゲートでは、呼び出しリストにメソッドを追加する Combine メソッド、およびリストからメソッドを削除する Remove メソッドがサポートされています。

アプリケーションによってイベントが記録されると、コントロールは、そのイベント用のデリゲートを呼び出すことによってイベントを発生させます。 次に、デリゲートによって、関連付けられたメソッドが呼び出されます。 ほとんどの場合、デリゲート (通常はマルチキャスト デリゲート) では、呼び出しリストにある関連付けされた各メソッドが順番に呼び出されるため、一対多通知を実行できます。 この方法では、すべての登録と通知がデリゲートによって処理されます。このため、コントロールでは、イベント通知の対象となるオブジェクトのリストを保持する必要がありません。

デリゲートでは、複数のイベントを同じメソッドに関連付けし、多対一通知を実行することもできます。 たとえば、ボタンとメニュー コマンドのクリック イベントで、同じデリゲートを呼び出すことができます。呼び出されたデリゲートによって単一のメソッドが呼び出されるので、どちらのイベントも同じように処理されます。

デリゲートと共に使用される関連付けの機構は動的です。デリゲートは、シグネチャがイベント ハンドラーのシグネチャと一致する任意のメソッドに実行時に関連付けできます。 この機能によって、状況に応じて関連付けるメソッドを設定または変更したり、イベント ハンドラーをコントロールに動的に関連付けたりできます。

参照

概念

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

その他の技術情報

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