在一个语句中设置多个事件处理程序
Setting multiple event handlers in one statement
有那条线:
this.button1.Click += this.button2.Click += (s, e) => MessageBox.Show("Test");
为什么这条线不起作用
Cannot implicitly convert type void
to System.EventHandler
我们需要多留一根线来做这个吗?
但是想象一下,如果我们为此得到 20 个按钮
this.button1.Click += this.button(n).Click += MessageBox.Show("Test");
我知道你会说什么:
You can do a for(each) for each buttons and ...
但是如果我需要选择我想要的按钮怎么办?
所以,为什么第一行代码不起作用,而存在这样的事情(写法不同)
是的,您需要为每个事件单独添加事件处理程序,错误消息会告诉您确切原因。在 C# 中,this.button2.Click += (s, e) => MessageBox.Show("Test");
没有 return 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);
}
有那条线:
this.button1.Click += this.button2.Click += (s, e) => MessageBox.Show("Test");
为什么这条线不起作用
Cannot implicitly convert type
void
toSystem.EventHandler
我们需要多留一根线来做这个吗? 但是想象一下,如果我们为此得到 20 个按钮
this.button1.Click += this.button(n).Click += MessageBox.Show("Test");
我知道你会说什么:
You can do a for(each) for each buttons and ...
但是如果我需要选择我想要的按钮怎么办?
所以,为什么第一行代码不起作用,而存在这样的事情(写法不同)
是的,您需要为每个事件单独添加事件处理程序,错误消息会告诉您确切原因。在 C# 中,this.button2.Click += (s, e) => MessageBox.Show("Test");
没有 return 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);
}