[英]Setting multiple event handlers in one statement
有那条线:
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(每个)...
但是,如果我需要选择想要的按钮怎么办?
因此,为什么第一行代码不起作用,并且存在这样的事情(写的方式不同)
是的,您需要分别向每个事件添加事件处理程序,并且错误消息告诉您确切原因。 在C#中, this.button2.Click += (s, e) => MessageBox.Show("Test");
不返回lambda值,因此没有要添加到button1.Click
事件的内容。
这也只是普通的坏风格。 我不得不阅读第一行两次,以了解您在哪里尝试。 您绝不应该为了简洁而牺牲清晰度。
如果要将三个或更多按钮连接到单个事件处理程序(嵌入式或固定),则需要将它们放在单独的行上。
private void Form1_Load(object sender, EventArgs e)
{
this.button1.Click += new System.EventHandler(this.button1_Click);
this.button2.Click += new System.EventHandler(this.button1_Click);
this.button3.Click += new System.EventHandler(this.button1_Click);
// OR
this.button1.Click += (s, a) => ShowMessageBox("Test1");
this.button2.Click += (s, a) => ShowMessageBox("Test2");
this.button3.Click += (s, a) => ShowMessageBox("Test3");
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello Event World");
}
private void ShowMessageBox(string message)
{
MessageBox.Show(message);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.