如何创建将多个事件处理程序附加到多个控件的函数?

时间:2012-06-08 17:09:36

标签: c# .net winforms events .net-4.0

问题:
如何创建将多个事件处理程序附加到多个控件的函数?

意图:
我正在使用C#开发一个Windows窗体应用程序。我想创建一个函数,它接受一组控件和一组事件处理程序。此函数将事件处理程序附加到控件。什么是最优雅,可重复使用的方式。我有一个非常丑陋的方式与委托这样做,但它是一个但是我把它扔进一个循环并放弃该功能的工作就不那么重要了。

我基本上想要的行为:

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


功能:
attachHandlers(? controlCollection, ? eventHandlers)

修改:
我只想在所有控件上订阅所有处理程序到同一个事件。我没有在我的描述中明确说过,所以我认为这是造成混淆的原因。

1 个答案:

答案 0 :(得分: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;
}