将可选参数添加到button_click函数

时间:2014-11-07 00:28:29

标签: c#

我想在button_click函数中添加一个可选参数,以便我可以通过从另一个函数调用它来插入其他信息。

以下是代码:

    private void button1_Click(object sender, EventArgs e, string bla = "")
    {
        if (bla.Length > 0)
        {
            MessageBox.Show(bla);
        }
        else
        {
            MessageBox.Show("Hi!");
        }
    }
    private void button1_trigger()
    {
        button1_Click(null, null, "hi");
    }

我从visual studio 2012获得的错误 enter image description here enter image description here

1 个答案:

答案 0 :(得分:4)

虽然看起来你的代码应该可行(最后一个参数是可选的,所以“button1_Click”仍然应该与委托匹配),但它并不是由于C#编译器的限制。也就是说,编译器无法将方法与委托(方法具有重载或可选参数)匹配。 (这是有充分理由的 - 你可能会认为优雅地处理这些案件会更复杂.Eric Lippert在他的博客上写过这个主题。)

我只想添加另一个适用于这两种情况的函数,并从处理程序中调用它:

private void trigger(object sender, EventArgs e, string bla = "")
{
    if (bla.Length > 0)
    {
        MessageBox.Show(bla);
    }
    else
    {
        MessageBox.Show("Hi!");
    }
}

private void button1_Click(object sender, EventArgs e)
{
    trigger(sender, e);
}

private void button1_trigger()
{
    trigger(null, null, "hi");
}

修改

因此,如果您不想因任何原因添加额外的函数,那么您可以使用lambda来添加处理程序:

this.button1.Click += (sender, args) => this.button1_Click(sender, args);

生成的编译代码实际上非常相似(我相信C#编译器会为匿名委托添加另一个成员函数),但这种语法肯定更紧凑。