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