在一个语句中设置多个事件处理程序

时间:2015-05-16 17:21:56

标签: c# events c#-4.0

有这条线:

this.button1.Click += this.button2.Click += (s, e) => MessageBox.Show("Test");

为什么这条线不起作用

  

无法隐式将void类型转换为System.EventHandler

我们需要再多一行来做这件事吗? 但想象一下,如果我们有20个按钮

this.button1.Click += this.button(n).Click += MessageBox.Show("Test");

我知道你会说什么:

  

您可以为每个按钮执行for(each)和...

但如果我需要选择我想要的按钮呢?

那么,为什么第一行代码不起作用,并存在这样的事情(以不同的方式写)

2 个答案:

答案 0 :(得分:5)

是的,您需要为每个事件单独添加事件处理程序,并且错误消息正在告诉您确切原因。在C#中,this.button2.Click += (s, e) => MessageBox.Show("Test");不返回lambda值,因此没有任何内容可以添加到button1.Click事件中。

它也只是简单的坏风格。我必须两次阅读第一行才能意识到你在哪里尝试。你永远不应该牺牲清晰度来支持简洁。

答案 1 :(得分:0)

如果要将三个或更多按钮连接到单个事件处理程序(内联或固定),则需要将它们放在单独的行上。

UPDATE hitcounts SET ip = INET6_ATON(INET_NTOA(ip));