C# 如何将额外参数传递给事件处理程序?

C# 如何将额外参数传递给事件处理程序?,c#,events,C#,Events,我正在尝试从窗体的按钮单击事件调用共享全局事件处理程序 public void button21_Click(object me, EventArgs MyArgs) { button17_Click(me, MyArgs); /// WORKS! } 我要做的是将XML传递给该方法 比如: public void button21_Click(object me, EventArgs MyArgs) { button17_Click(me, MyArgs, MyXmlString)

我正在尝试从窗体的按钮单击事件调用共享全局事件处理程序

public void button21_Click(object me, EventArgs MyArgs) {
  button17_Click(me, MyArgs);  /// WORKS!
}
我要做的是将XML传递给该方法

比如:

public void button21_Click(object me, EventArgs MyArgs) {
  button17_Click(me, MyArgs, MyXmlString);  /// ERROR!
}
我并不总是需要button17_Click()方法中的XML,只有在按下Button11时才需要

如何才能做到这一点?

您不能将XML(或其他任意数据类型)传递给.NET中的事件处理程序。他们有一个特定的签名,这就是你必须使用的

您不应该从按钮21单击调用按钮17单击。相反,请尝试以下方法:

public void button17_Click(object sender, EventArgs e)
{
    CommonFunctionality();
}

public void button21_Click(object sender, EventArgs e)
{
    CommonFunctionality();
}

private void CommonFunctionality()
{
    // In here, place the code that used to be in button17_click
}
然后,您可能需要创建一个可以使用XML的通用功能版本。

您不能将XML(或其他任意数据类型)传递给.NET中的事件处理程序。他们有一个特定的签名,这就是你必须使用的

您不应该从按钮21单击调用按钮17单击。相反,请尝试以下方法:

public void button17_Click(object sender, EventArgs e)
{
    CommonFunctionality();
}

public void button21_Click(object sender, EventArgs e)
{
    CommonFunctionality();
}

private void CommonFunctionality()
{
    // In here, place the code that used to be in button17_click
}

然后,您可能需要创建一个可以使用XML的通用功能版本。

我不会尝试直接调用您的事件处理程序,这取决于事件本身

您应该做的是将
按钮17
的逻辑移到一个单独的方法中,并调用该方法

private void button17_Click(object sender, EventArgs e)
{
    // call the newly created method instead (with the XML argument null)
    HandleClickOperation(null);
}

private void button21_Click(object sender, EventArgs e)
{
    // call the newly created method instead (with the XML argument set)
    HandleClickOperation(MyXmlString);
}

private void HandleClickOperation(string xmlString)
{
    if (xmlString == null)
    {
        // do things unique to button17 behavior
    }
    else
    {
        // do things unique to button21 behavior
    }
    // the logic that was in button17_Click()
}

我不会试图直接调用您的事件处理程序,这取决于事件本身

您应该做的是将
按钮17
的逻辑移到一个单独的方法中,并调用该方法

private void button17_Click(object sender, EventArgs e)
{
    // call the newly created method instead (with the XML argument null)
    HandleClickOperation(null);
}

private void button21_Click(object sender, EventArgs e)
{
    // call the newly created method instead (with the XML argument set)
    HandleClickOperation(MyXmlString);
}

private void HandleClickOperation(string xmlString)
{
    if (xmlString == null)
    {
        // do things unique to button17 behavior
    }
    else
    {
        // do things unique to button21 behavior
    }
    // the logic that was in button17_Click()
}

好的,这个问题比昨天好一点,但我们仍然看不到:

  • 按钮17的声明是什么
  • 为什么按钮17单击是一个事件处理程序
  • 为什么它是一个“全局”事件处理程序
  • 你说的“全球”是什么意思
  • 这是你的代码吗(你能更改按钮17吗

以及形成答案或建议所需的一切。

好的,这个问题比昨天好一点,但我们仍然看不到:

  • 按钮17的声明是什么
  • 为什么按钮17单击是一个事件处理程序
  • 为什么它是一个“全局”事件处理程序
  • 你说的“全球”是什么意思
  • 这是你的代码吗(你能更改按钮17吗


你的朋友当然会说一口流利的“网络英语”。但这只是你先前问题的重复。从昨天开始你真的没有进步吗?一个按钮怎么会被按下?@AS-CII Sad按钮从未被点击过@bzlm我在metastackoverflow上被告知要用更好的措辞提问,所以我这样做了,所以它一定是重复的,但更好的是,你朋友的可能的重复肯定是流利的“互联网英语”。但这只是你先前问题的重复。从昨天开始你真的没有进步吗?一个按钮怎么会被按下?@AS-CII Sad按钮从未被点击过@bzlm我在metastackoverflow上被告知要用更好的措辞提问,所以我这样做了,所以它必须是重复的,但可能是更好的重复,他现在正在使用
按钮21\u单击
;-)他现在正在按
按钮21\u单击
。-)我的朋友告诉我类似的事情,但用按钮17_Click_Aux代替hadleclick操作@普拉尚特:你可以随意命名。我只是不知道你的代码实际上做了什么,所以我给它起了一个通用名。关键是不要直接将该方法用作事件处理程序。@Jeff M我理解这些名称,我认为这是abstarction@JeffM我剩下的唯一问题是为什么事件不是pubic@PRASHANT:通常情况下,当您为事件创建事件处理程序时,它被声明为私有实例方法,我坚持这样做。在你的情况下,你宣布它们是公开的。那也很好。只需确保调整代码以满足您的需要。您不必完全按照书面形式使用我们的示例我的朋友告诉我类似的事情,但用按钮17_Click_Aux代替hadleclick操作@普拉尚特:你可以随意命名。我只是不知道你的代码实际上做了什么,所以我给它起了一个通用名。关键是不要直接将该方法用作事件处理程序。@Jeff M我理解这些名称,我认为这是abstarction@JeffM我剩下的唯一问题是为什么事件不是pubic@PRASHANT:通常情况下,当您为事件创建事件处理程序时,它被声明为私有实例方法,我坚持这样做。在你的情况下,你宣布它们是公开的。那也很好。只需确保调整代码以满足您的需要。您不必完全按照书面形式使用我们的示例