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

时间:2011-01-28 19:54:29

标签: 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);  /// ERROR!
}

只有在按下button21时,我才会在button17_Click()方法中始终需要XML。

我该怎么做?

3 个答案:

答案 0 :(得分:4)

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

你不应该从button21_click调用button17_click。相反,试试这个:

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的常用功能版本。

答案 1 :(得分:3)

我不会尝试直接调用您的事件处理程序,将其留给事件本身。

您应该做的是将button17的逻辑移到单独的方法中,然后调用该方法。

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

答案 2 :(得分:2)

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

  • button17_Click
  • 的声明是什么
  • 为什么button17_Click一个eventhandler?
  • 为什么它是'全球'事件处理程序?
  • 这里的'全球'是什么意思?
  • 是你的代码(你能改变button17_Click吗?)
  • ...

所有这一切都需要形成答案或建议。