通常如何从控件中取消连接事件?

Posted

技术标签:

【中文标题】通常如何从控件中取消连接事件?【英文标题】:How to unwire event from control generically? 【发布时间】:2021-07-28 02:17:39 【问题描述】:

我需要暂时从我的 NumericUpDown 控件中取消连接一些事件,因为我正在以编程方式更改它们并且不想触发 ValueChanged 事件。代码应如下所示:

private void UnwireNUD (NumericUpDown nud) 
   nud.ValueChanged -= numericUpDown_ValueChanged;

numericUpDown_ValueChanged 部分是我不知道如何引用的部分。有没有人这样做过并且不介意提供一些帮助?

【问题讨论】:

【参考方案1】:

在 C# 中,事件委托是隐藏信息。如果你说“我的 NumericUpDown”,你控制它的源代码吗?如果没有,你只能通过反射来做到这一点,你不应该这样做。唯一的其他选择是以一种或另一种方式更改订阅者,例如使用标志并忽略方法调用,或者使用具有某种抑制逻辑的包装器对象。

一般来说,假设所有订阅者都对该事件不感兴趣似乎很危险。

【讨论】:

所有订阅者,在这个特定的实例中,实际上都是 NumericUpDown 控件。我希望通过通用调用来引用它们,但为了简单起见,我继续硬编码了它们的名称。谢谢。

以上是关于通常如何从控件中取消连接事件?的主要内容,如果未能解决你的问题,请参考以下文章

隐藏/取消隐藏基于控件标签的主窗体上的控件,在连续子窗体中使用当前事件

如何在初始 mousedown 事件后取消文本选择?

是否可以在更新前事件期间将焦点设置在控件上而不取消更新?

如何从 jQuery 中的“滚动”事件中取消绑定所有先前添加的事件? [复制]

Xamarin.Forms:我什么时候应该在ContentPage中取消控件的事件

Bootstrap Vue 阻止/取消事件