C#中能否将EventArgs转换为MouseEventArgs?
解决MouseHover事件中检测鼠标按键的问题
嘿,这个问题我之前踩过坑,咱们先把问题根源理清楚:
你遇到的问题本质不是类型转换的锅——MouseHover事件的EventArgs e本身就不包含鼠标按键信息,就算你强行把它转成MouseEventArgs,也会直接抛出InvalidCastException,因为底层传递过来的就是一个纯EventArgs实例,根本没有Button属性的数据。
那该怎么实现你要的“悬停时检测鼠标左键是否按下”的需求呢?其实很简单,用Control.MouseButtons这个静态属性就可以了,它能实时返回当前被按下的鼠标按键状态,不管你在哪个事件里调用都有效。
修改后的代码如下:
private void pictureBox1_MouseHover(object sender, EventArgs e) { if (Control.MouseButtons == MouseButtons.Left) { /* 鼠标左键按下时的逻辑 */ } }
额外补充一点:如果你的场景更复杂(比如需要区分按键按下的时机),也可以结合MouseDown/MouseUp事件来维护一个自定义的按键状态变量,但对于单纯的“悬停时检查当前按键”,用Control.MouseButtons是最直接高效的方案。
内容的提问来源于stack exchange,提问作者jamheadart
相关产品推荐
相关产品推荐

