我正在尝试为我的表单上的每个控件添加一个事件处理程序。这个表单是一个简单的信息框,它弹出,并点击它上面的任何地方也会做同样的事情(有点像Outlook的电子邮件通知器)。为此,我写了一个递归方法来为每个控件添加一个MouseClick
处理程序,如如下:如何通过名称向事件添加事件处理程序?
private void AddMouseClickHandler(Control control, MouseEventHandler handler)
{
control.MouseClick += handler;
foreach (Control subControl in control.Controls)
AddMouseClickHandler(subControl, handler);
}
但是,如果我想添加一个处理所有MouseDown
和MouseUp
事件,我不得不写两个方法。我确信有解决办法,但我找不到它。我要像一个方法:
private void AddRecursiveHandler(Control control, Event event, EventHandler handler)
{
control.event += handler;
foreach (Control subControl in control.Controls)
AddRecursiveHandler(subControl, event, handler);
}
+1 Lambdas是一个整洁的解决方案。 – 2010-05-19 15:46:26
这很好用!太糟糕了,你不能通过事件,寿。兰姆达斯非常整洁;我必须更经常地记住他们。 – dlras2 2010-05-19 16:08:40
多好的答案和代码示例;谢谢,托马斯! – BillW 2011-07-13 15:39:36