1

質問:
複数のイベント ハンドラーを複数のコントロールに関連付ける関数を作成するにはどうすればよいですか?

意図:
C# を使用して Windows フォーム アプリケーションを開発しています。コントロールのコレクションとイベント ハンドラーのコレクションを受け取る関数を作成したいと考えています。この関数は、イベント ハンドラーをコントロールにアタッチします。これを行うための最もエレガントで再利用可能な方法は何でしょうか。デリゲートでこれを行うにはかなり醜い方法がありますが、これをループに入れて関数を放棄するのは簡単ではありません。

私が基本的に欲しい行動:

foreach(Control control in controlCollection)
     foreach(EventHandler handler in eventHandlerCollection)
                    control.Event += handler;


機能:
attachHandlers(? controlCollection, ? eventHandlers)

編集:
すべてのハンドラーをすべてのコントロールの同じイベントにサブスクライブします。私は自分の説明でそれを明示的に述べていないので、それがすべての混乱の理由であると私は信じています.

4

1 に答える 1

2

問題のコントロールが同じ基本クラスまたはインターフェイスから継承されている (またはそれらが同じクラスである) 場合は、次のようなことができます。

void AttachClickEventHandlers(List<IClickableControl> controls, List<MyClickHandler> eventHandlers)
{
    foreach (var control in controls)
        foreach (MyClickHandler handler in eventHandlers)
            control.Click += handler;
}

これは、次のようなインターフェースを想定しています。

public interface IClickableControl
{
    event MyClickHandler Click;
}
于 2012-06-08T17:21:52.623 に答える