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

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 控件。我希望通过通用调用来引用它们,但为了简单起见,我继续硬编码了它们的名称。谢谢。

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