You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:00:37