发出正确投射事件的问题,包括自定义的 EventArgs

Issue to properly cast an event including a customized EventArgs

我正在制作 Win Form。 我的按钮之一的点击事件需要接受自定义参数(继承自 EventArgs):

private void B_Say_Click(object sender, Custom_EventArgs e) //instead of EventArgs e
{
....
}

(原因是当我按下按钮时可能会调用此方法,但也会在我需要获取自定义数据的不同其他上下文中调用(我想通过 Custom_EventArgs 传递)。

当然我已经包含了派生的 class:

 public  class Custom_EventArgs : EventArgs
  { 
      public string say_string;
  }

编译器为行生成此错误:

this.B_Say.Click += new System.EventHandler(this.B_Say_Click);

错误 3 'B_Say_Click' 没有重载匹配委托 'System.EventHandler'

如果我尝试使用 EventHandler 的通用版本:

this.B_Say.Click += new System.EventHandler<Custom_EventArgs>(this.B_Say_Click);

我得到: 错误 3 无法将类型 'System.EventHandler' 隐式转换为 'System.EventHandler'

我想 System.Windows.Forms.Button class 中按钮的关联事件签名只接受 EventHandler。

由于 Custom_EventArgs 派生自 EvenArgs,我想我们可以显式地将 Custom_EventArgs 转换为 Eventargs 来解决问题,但我不确定该怎么做?

如果铸造不是解决方案,还有其他解决方案吗?

提前致谢。

您不能更改活动签名。但是,您可以检查传递的事件参数的类型。

private void B_Say_Click(object sender, EventArgs e) {
    var customArgs = e as Custom_EventArgs;
    if (null != customArgs) {
        // do what you want
    }
}