winforms 如何获取鼠标右键事件?将EventArgs更改为MouseEventArgs会在Form1Designer中导致错误?

a64a0gku  于 2023-10-23  发布在  其他
关注(0)|答案(7)|浏览(150)

我有一个方法来检测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
我该如何解决此问题?感谢您的阅读

lvmkulzt

lvmkulzt1#

您应该在click事件处理程序中引入强制转换

MouseEventArgs me = (MouseEventArgs) e;
des4xlb0

des4xlb02#

您需要MouseClick而不是Click事件处理程序reference

switch (e.Button) {

    case MouseButtons.Left:
    // Left click
    break;

    case MouseButtons.Right:
    // Right click
    break;
    ...
}
qc6wkl3g

qc6wkl3g3#

对我来说,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
        }
 }

你可以根据参数的值来修改它。

**提示:**仅使用鼠标抬起事件时有一个catch。如果你鼠标按下控件,然后 * 你将光标移出控件释放它 *,你仍然会触发事件。为了避免这种情况,您还应该确保鼠标抬起发生在事件处理程序中的控件内。在检查按钮之前检查鼠标光标坐标是否在控件的矩形内将正确执行此操作。

jum4pzuy

jum4pzuy4#

使用MouseDown事件

if(e.Button == MouseButton.Right)
kx1ctssn

kx1ctssn5#

使用MouseClick事件而不是Click

bhmjp9jg

bhmjp9jg6#

这肯定会帮助很多人!

private void axWindowsMediaPlayer1_ClickEvent(object sender, AxWMPLib._WMPOCXEvents_ClickEvent e)
    {
        if(e.nButton==2)
        {
            contextMenuStrip1.Show(MousePosition);
        }
    }

[e.nbutton==2] 就像 [e.button==鼠标右键]

ni65a41a

ni65a41a7#

这段代码是真的:

MouseEventArgs me = (MouseEventArgs)e;
if (me.Button == MouseButtons.Right)
   //Right Click
else
   //Left Click

相关问题