换句话说,我有一个 UserControl,上面有一个标签。那么,当客户端注册到 UserControl 的 MouseMove 事件时,无论鼠标是在标签上还是在 UserControl 的其他地方,它都应该得到该事件。设置它的最佳方法是什么?
C#
最佳答案
我最喜欢以与您要求的方式类似的方式“传递”事件的技巧是记住事件的实现方式与属性类似 - 私有(private)委托(delegate)的包装器。您可以使用 add
和 remove
覆盖此行为:(使用 new
显式隐藏 Control.MouseMove)
public new event EventHandler MouseMove {
add { m_Label.MouseMove += value; }
remove { m_Label.MouseMove -= value; }
}
请注意,可能有更好的方法来隐藏/覆盖 MouseMove 事件 - 通过查看反射器中的 Control 检查它是如何实现的,并查看是否有一个 Hook 可以覆盖以获取真正的基本 MouseMove 事件。当然,如果您不想隐藏基本的 MouseMove 事件,或者甚至不想做这样的事情,您的事件可以随意命名:
public new event EventHandler MouseMove {
add {
m_Label.MouseMove += value;
base.MouseMove += value;
}
remove {
m_Label.MouseMove -= value;
base.MouseMove -= value;
}
}
关于c# - 我应该如何设置用户控件来触发其子项的事件,就好像它们是它自己的一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1772992/