次の方法で共有


方法 : イベント プロパティを使用して複数のイベントを処理する

更新 : 2007 年 11 月

イベント プロパティ (Visual Basic 2005 のカスタム イベント) を使用するには、イベントを発生させるクラスにイベント プロパティを定義し、そのイベントを処理するクラスにイベント プロパティのデリゲートを設定します。1 つのクラスにイベント プロパティを複数実装するには、そのクラス内部に、各イベント用に定義されたデリゲートを格納および保持する必要があります。通常は、イベント キーをインデックスとするデリゲート コレクションを実装することによってこれを実現します。

イベントのデリゲートを格納するには、EventHandlerList クラスを使用するか、独自のコレクションを実装します。コレクション クラスには、イベント キーに基づいてイベント ハンドラ デリゲートに対する設定、アクセス、および取得を行うメソッドを用意する必要があります。たとえば、Hashtable クラスを使用したり、DictionaryBase クラスからカスタム クラスを派生させたりできます。デリゲート コレクションの実装の詳細をクラスの外部に公開する必要はありません。

クラス内の各イベント プロパティには、add アクセサ メソッドおよび remove アクセサ メソッドを定義します。イベント プロパティの add アクセサは、入力デリゲート インスタンスをデリゲート コレクションに追加します。イベント プロパティの remove アクセサは、デリゲート コレクションから入力デリゲート インスタンスを削除します。これらのイベント プロパティ アクセサでは、イベント プロパティに定義済みのキーを使用して、デリゲート コレクションに対するインスタンスの追加や削除を行います。

イベント プロパティを使用して複数のイベントを処理するには

  1. イベントを発生させるクラスにデリゲート コレクションを定義します。

  2. 各イベントについて、キーを定義します。

  3. イベントを発生させるクラスにイベント プロパティを定義します。

  4. デリゲート コレクションを使用して、各イベント プロパティに対する add アクセサおよび remove アクセサを実装します。

  5. パブリック イベント プロパティを使用して、イベントを処理するクラスのイベント ハンドラ デリゲートの追加と削除を行います。

使用例

各イベントのデリゲートを格納するために EventHandlerList を使用して、MouseDown イベント プロパティおよび MouseUp イベント プロパティを実装する C# コードの例を次に示します。イベント プロパティ コンストラクトのキーワードは、太字で示されています。

メモ :

イベント プロパティは、Visual Basic 2005 ではサポートされていません。

// The class SampleControl defines two event properties, MouseUp and MouseDown.
class SampleControl: Component {
   // :
   // Define other control methods and properties.
   // :
   
   // Define the delegate collection.
   protected EventHandlerList listEventDelegates = new EventHandlerList();
   
   // Define a unique key for each event.
   static readonly object mouseDownEventKey = new object();
   static readonly object mouseUpEventKey = new object();
   
   // Define the MouseDown event property.
   public event MouseEventHandler MouseDown {  
      // Add the input delegate to the collection.
      add { listEventDelegates.AddHandler(mouseDownEventKey, value); }
      // Remove the input delegate from the collection.
      remove { listEventDelegates.RemoveHandler(mouseDownEventKey, value); }
   }

   // Define the MouseUp event property.
   public event MouseEventHandler MouseUp {
      // Add the input delegate to the collection.
      add { listEventDelegates.AddHandler(mouseUpEventKey, value); }
      // Remove the input delegate from the collection.
      remove { listEventDelegates.RemoveHandler(mouseUpEventKey, value); }
   }
}

参照

処理手順

方法 : メモリの使用量を節約するイベントを宣言する

概念

複数のイベントの発生

参照

System.ComponentModel.EventHandlerList

System.Web.UI.Control.Events

その他の技術情報

イベントの処理と発生