需要不同签名的两个事件的相同事件处理程序

Posted

技术标签:

【中文标题】需要不同签名的两个事件的相同事件处理程序【英文标题】:Same event handler for two events which requires different signature 【发布时间】:2017-11-11 19:23:44 【问题描述】:

我有一个方法,我想在 TextChangedValidating 事件上都调用它。问题是TextChangede 参数是EventArgs 类型,而Validatinge 参数是CancelEventArgs 类型。

我显然可以这样做:

void TextBox_TextChanged(object sender, EventArgs e) => Method();
void TextBox_Validating(object sender, CancelEventArgs e) => Method();

但我想知道是否可以选择让两个事件具有相同的事件处理程序。

【问题讨论】:

只需使用void MyHandlerName(object sender, EventArgs e) - 它对两个事件都有效。 但是你为什么要这样做呢?我会有不同的处理程序,然后从他们两个调用公共代码。 @Evk - 谢谢。我试过了,但是在“属性”面板的“事件”选项卡中,我没有看到方法。 好吧,对该面板一无所知,但我很确定具有此签名的处理程序对这两个事件都有效(因为 CancelEventArgs 继承自 EventArgs),请尝试在代码中执行此操作,例如( textBox.Validating += MyHandler) @CodingYoshi - 具体原因是我要调用的方法验证了TextBox,我希望在用户键入和失去焦点时都对其进行验证。 【参考方案1】:

由于 EventArgs 是 CancelEventArgs 的基础,因此您可以将 (object sender, EventArgs e) 用于这两个事件。在属性窗口中,您可能看不到正确的事件名称,因为您使用基类,因此您可以手动在此处写入名称

【讨论】:

以上是关于需要不同签名的两个事件的相同事件处理程序的主要内容,如果未能解决你的问题,请参考以下文章

事件2 (标准 EventHandler)

从事件处理程序确定发送者对象

jQuery 多事件处理程序 - 如何取消?

jquery datepicker onselect 事件处理程序多次

Go语言事件请求处理程序(Event Handler)

如何在单个视图中处理多个分段控件的事件