イベントは、コード内で応答できるアクション ("ハンドル") です。 イベントは通常、マウスのクリックやキーの押下などのユーザー アクションによって生成されますが、プログラム コードやシステムによって生成することもできます。
イベント ドリブン アプリケーションは、イベントに応答してコードを実行します。 各フォームとコントロールは、応答できるイベントの定義済みのセットを公開します。 これらのイベントのいずれかが発生し、関連するイベント ハンドラーがある場合は、ハンドラーが呼び出され、コードが実行されます。
オブジェクトによって発生するイベントの種類は異なりますが、多くの種類がほとんどのコントロールに共通しています。 たとえば、ほとんどのオブジェクトには、ユーザーがクリックしたときに発生する Click イベントがあります。
注
多くのイベントは、他のイベントと共に発生します。 たとえば、DoubleClick イベントが発生する過程で、MouseDown、MouseUp、および Click イベントが発生します。
イベントを発生および使用する方法の一般的な情報については、「 .NET でのイベントの処理と発生」を参照してください。
代理人とその役割
デリゲートは、イベント処理メカニズムを構築するために .NET 内で一般的に使用されるクラスです。 デリゲートは、Visual C++ やその他のオブジェクト指向言語でよく使用される関数ポインターとほぼ同じです。 ただし、関数ポインターとは異なり、デリゲートはオブジェクト指向、型セーフ、セキュリティで保護されています。 また、関数ポインターに特定の関数への参照のみが含まれている場合、デリゲートはオブジェクトへの参照と、オブジェクト内の 1 つ以上のメソッドへの参照で構成されます。
このイベント モデルでは、デリゲート を使用して、イベントを処理するために使用されるメソッドにイベントをバインドします。 デリゲートを使用すると、ハンドラー メソッドを指定することで、他のクラスでイベント通知を登録できます。 イベントが発生すると、デリゲートはバインドされたメソッドを呼び出します。 デリゲートを定義する方法の詳細については、「イベントの処理と発生」を参照してください。
デリゲートは、1 つのメソッドまたはマルチキャストと呼ばれる複数のメソッドにバインドできます。 イベントのデリゲートを作成するときは、通常、マルチキャスト イベントを作成します。 まれな例外として、イベントごとに論理的に複数回繰り返されない特定のプロシージャ (ダイアログ ボックスの表示など) が発生するイベントが考えられます。 マルチキャスト デリゲートを作成する方法については、「デリゲート (マルチキャスト デリゲート)を結合する方法」を参照してください。
マルチキャスト デリゲートは、バインドされているメソッドの呼び出しリストを保持します。 マルチキャスト デリゲートは、呼び出しリストにメソッドを追加する Combine メソッドと、それを削除する Remove メソッドをサポートしています。
アプリケーションによってイベントが記録されると、コントロールはそのイベントのデリゲートを呼び出すことによってイベントを発生させます。 デリゲートは順番にバインドされたメソッドを呼び出します。 最も一般的なケース (マルチキャスト デリゲート) では、デリゲートは呼び出しリスト内のバインドされた各メソッドを順番に呼び出し、1 対多の通知を提供します。 この戦略は、コントロールがイベント通知のターゲット オブジェクトの一覧を保持する必要がないことを意味します。デリゲートはすべての登録と通知を処理します。
デリゲートを使用すると、複数のイベントを同じメソッドにバインドして、多対 1 の通知を行うこともできます。 たとえば、ボタン クリック イベントと menu-command-click イベントの両方で同じデリゲートを呼び出し、1 つのメソッドを呼び出してこれらの個別のイベントを同じ方法で処理できます。
デリゲートで使用されるバインディング メカニズムは動的です。デリゲートは、実行時に、イベント ハンドラーのシグネチャと一致する任意のメソッドにバインドできます。 この機能を使用すると、条件に応じてバインドされたメソッドを設定または変更したり、イベント ハンドラーをコントロールに動的にアタッチしたりできます。
Windows フォームのイベント
Windows フォームのイベントは、ハンドラー メソッドの EventHandler<TEventArgs> デリゲートで宣言されます。 各イベント ハンドラーには、イベントを適切に処理できる 2 つのパラメーターが用意されています。 次の例は、Button コントロールの Click イベントのイベント ハンドラーを示しています。
Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
End Sub
private void button1_Click(object sender, System.EventArgs e)
{
}
最初のパラメーターsender
は、イベントを発生させたオブジェクトへの参照を提供します。 2 番目のパラメーター e
は、処理されるイベントに固有のオブジェクトを渡します。 オブジェクトのプロパティ (および場合によってはそのメソッド) を参照することで、マウス イベントのマウスの位置や、ドラッグ アンド ドロップ イベントで転送されるデータなどの情報を取得できます。
通常、各イベントは、2 番目のパラメーターに対して異なるイベント オブジェクト型のイベント ハンドラーを生成します。 MouseDown イベントや MouseUp イベントなどの一部のイベント ハンドラーは、2 番目のパラメーターに同じオブジェクト型を持ちます。 これらの種類のイベントでは、同じイベント ハンドラーを使用して両方のイベントを処理できます。
同じイベント ハンドラーを使用して、異なるコントロールに対して同じイベントを処理することもできます。 たとえば、フォームにRadioButton コントロールのグループがある場合は、すべてのClickのRadioButton
イベントに対して 1 つのイベント ハンドラーを作成できます。 詳細については、「 コントロール イベントを処理する方法」を参照してください。
関連コンテンツ
.NET Desktop feedback