我有一种方法可以检测Visual Studio通过双击窗体来制作的左键单击事件。
private void pictureBox1_Click(object sender, EventArgs e)
{
MessageBox.Show("Left click");
}
我想通过右键单击同一个对象来获得右键单击事件。
我在网上看到你可以使用这个开关:
private void pictureBox1_Click(object sender, EventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right){MessageBox.Show("Right click");}
if (e.Button == System.Windows.Forms.MouseButtons.Left){MessageBox.Show("Left click");}
}
问题是,当我这样做时
e.Button
它会产生错误:
不包含System.EventArgs
的定义...Button
所以我通过将
EventArgs.e
更改为 MouseEventArgs.e
来解决此问题
但是 Form1Designer 中出现了一个新错误,其中事件行是:
this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
错误提示:
匹配代表pictureBox1_Click
没有过载System.EventHandler
我该如何解决这个问题? 感谢您的阅读
您应该在
click
事件处理程序中引入强制转换
MouseEventArgs me = (MouseEventArgs) e;
您需要
MouseClick
而不是 Click
事件处理程序,reference。
switch (e.Button) {
case MouseButtons.Left:
// Left click
break;
case MouseButtons.Right:
// Right click
break;
...
}
对我来说,MouseClick 或 Click 事件都不起作用,因为当您右键单击时,这些事件不会被调用。 快速的方法是:
private void button1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
//do something here
}
else//left or middle click
{
//do something here
}
}
您可以根据参数的值对其进行修改以完全执行您想要的操作。
警告: 仅使用鼠标向上事件有一个问题。如果您将鼠标放在控件上,然后将光标移出控件以释放它,您仍然会触发事件。为了避免这种情况,您还应该确保鼠标松开发生在事件处理程序的控件内。在检查按钮之前检查鼠标光标坐标是否在控件的矩形内即可正确完成。
使用 MouseDown 事件
if(e.Button == MouseButton.Right)
使用 MouseClick 事件而不是 Click
这肯定会对很多人有帮助!
private void axWindowsMediaPlayer1_ClickEvent(object sender, AxWMPLib._WMPOCXEvents_ClickEvent e)
{
if(e.nButton==2)
{
contextMenuStrip1.Show(MousePosition);
}
}
[ e.nbutton==2 ] 就像 [ e.button==MouseButtons.Right ]
此代码是正确的:
MouseEventArgs me = (MouseEventArgs)e;
if (me.Button == MouseButtons.Right)
//Right Click
else
//Left Click
在点击方法中,将
EventArgs e
更改为MouseEventArgs e
。
这是代码:
private void pictureBox1_Click(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
MessageBox.Show("Left click");
}
}