有那条线:

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(每个)...

但是,如果我需要选择想要的按钮怎么办?

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

===============>>#1 票数:5 已采纳

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

这也只是普通的坏风格。 我不得不阅读第一行两次,以了解您在哪里尝试。 您绝不应该为了简洁而牺牲清晰度。

===============>>#2 票数:0

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

    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);
    }

  ask by Stickly translate from so

未解决问题?本站智能推荐: