C# 如何创建将多个事件处理程序附加到多个控件的函数?
问题:C# 如何创建将多个事件处理程序附加到多个控件的函数?,c#,.net,winforms,events,.net-4.0,C#,.net,Winforms,Events,.net 4.0,问题: 如何创建将多个事件处理程序附加到多个控件的函数? 意图: 我正在使用C#开发一个windows窗体应用程序。我想创建一个函数,它接受一组控件和一组事件处理程序。此函数将事件处理程序附加到控件。最优雅、可重复使用的方法是什么。我有一个非常难看的方法来处理委托,但是这是一个很好的方法,但是对于我来说,把它放入一个循环中并放弃这个函数就不那么麻烦了。 我基本上想要的行为: 功能: attachHandlers(?controlCollection,?eventHandlers) 编
如何创建将多个事件处理程序附加到多个控件的函数?
意图:
我正在使用C#开发一个windows窗体应用程序。我想创建一个函数,它接受一组控件和一组事件处理程序。此函数将事件处理程序附加到控件。最优雅、可重复使用的方法是什么。我有一个非常难看的方法来处理委托,但是这是一个很好的方法,但是对于我来说,把它放入一个循环中并放弃这个函数就不那么麻烦了。
我基本上想要的行为:
功能:
attachHandlers(?controlCollection,?eventHandlers)
编辑:
我只是想订阅所有控件上相同事件的所有处理程序。在我的描述中,我没有明确指出这一点,因此我认为这就是所有混淆的原因。如果所讨论的控件继承自相同的基类或接口(或者它们是相同的类),您可以执行以下操作:
void AttachClickEventHandlers(List<IClickableControl> controls, List<MyClickHandler> eventHandlers)
{
foreach (var control in controls)
foreach (MyClickHandler handler in eventHandlers)
control.Click += handler;
}
您的函数如何知道处理程序应该订阅到哪个事件(
单击
,输入
,验证
,…)?不清楚您在寻找什么:您想要从{controls,eventname}到eventHandlers的映射类型?每个控件上都有多个事件。。。还不清楚每个控件是否有一组唯一的处理程序,或者您希望对多个(某些?)控件使用相同的处理程序。您仍然没有回答stakx的问题。该函数如何知道订阅处理程序的事件。@Servy我请求的函数只是一个通用函数,我将对其进行硬编码。这就是函数应该知道的。再次为这一混乱感到抱歉。在通用函数中,您不会硬编码它,而是希望它是通用的。在一个特定的实例中,这不是一般化的,您可以将其硬编码为一个特定的事件。考虑到您的工厂将对其进行硬编码,您计划将其硬编码到什么事件?它是否是控件中的事件
,是否需要将输入控件的类型限制为某些子类型,以确保它们都具有适当的事件,等等。。。我去编辑我的问题,然后回来,基本上是你写的。你怎么知道你想附加到点击事件,或者集合中的每个控件都有相同的事件?@Servy我只是假设OP希望将所有处理程序订阅到所有控件上的相同事件。如果要附加click事件,也不需要任何接口。单击事件已经存在于控件中,因此您知道所有控件都将有该事件。您还知道代理类型将是EventHandler
。OP中的代码实际上不仅足够,而且更好。@dkroy我看不出您已经发布的代码中的问题。什么东西不管用?
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;
}