c#我可以将事件参数转换为MouseEventArgs吗?

c#我可以将事件参数转换为MouseEventArgs吗?,c#,C#,我认为这与铸造有关: 首先,我为picturebox声明一个事件处理程序: pictureBox1.MouseHover += new EventHandler(this.pictureBox1_MouseHover); 接下来,我将尝试检查左侧鼠标按钮是否被按下: private void pictureBox1_MouseHover(object sender, EventArgs e) { if (e.Button == MouseButt

我认为这与铸造有关:

首先,我为picturebox声明一个事件处理程序:

        pictureBox1.MouseHover += new EventHandler(this.pictureBox1_MouseHover);
接下来,我将尝试检查左侧鼠标按钮是否被按下:

    private void pictureBox1_MouseHover(object sender, EventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            /*some gibberish for when the left mouse button is held*/
        }

    }
但这不起作用,因为
EventArgs
不是
MouseEventArgs


我可以将
Cast
或以某种方式将
EventArgs e
转换为MouseEventArgs,以便上面的代码可以工作吗?

你能把苹果变成橙色吗?不。好吧,你不能仅仅从一个
EventArgs
实例创建一个
MouseEventArgs


在这种情况下,您的代码没有意义。您正在尝试获取悬停事件的按钮。悬停是在没有任何按钮点击的情况下完成的。如果您想知道在悬停时按下的按钮,您需要先缓存
MouseDown
MouseUp
事件,以注册单击的按钮。

如果您想检查移动鼠标时是否按下了鼠标按钮,那么您应该订阅
PictureBox.MouseDown
PictureBox.MouseMove
PictureBox.MouseUp
事件,如果要记录鼠标从第一次按下按钮开始的移动,在按住按钮的同时移动鼠标,以及松开按钮时的移动

private void PictureBox_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        //Handle mouse down logic here (press).
    }
}

private void PictureBox_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        //Handle mouse move logic here (hold).
    }
}

private void PictureBox_MouseUp(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        //Handle mouse up logic here (release).
    }
}

C#7:
如果(e是MouseEventArgs me){if(me.Button==MouseButtons.Left){}
。但这只有在
e
实际上是MouseEventArgs时才有效,而在这种情况下,事实证明它不是。你能把一个苹果变成橙色吗?这是有原因的
MouseEventArgs
没有被宣布为使用
MouseEventArgs
:它不会通过。鼠标单击有单独的事件(
MouseDown
MouseUp
)<代码>悬停仅表示正在发生悬停;有关鼠标按钮状态的信息不是事件的一部分。您可能正在寻找控件。而不是鼠标按钮。您可以使用“您能把苹果变成橙色吗?”;-)谢谢,我接受了这个答案,因为它解决并修复了我的问题-我所需要的只是将鼠标悬停改为移动以获取MouseEventArgs而不是EventArgs。