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