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

问题描述 投票:0回答:8

我有一种方法可以检测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

没有过载

我该如何解决这个问题? 感谢您的阅读

c# visual-studio-2012 event-handling
8个回答
57
投票

您应该在

click
事件处理程序中引入强制转换

MouseEventArgs me = (MouseEventArgs) e;

38
投票

您需要

MouseClick
而不是
Click
事件处理程序,reference

switch (e.Button) {

    case MouseButtons.Left:
    // Left click
    break;

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

25
投票

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

您可以根据参数的值对其进行修改以完全执行您想要的操作。

警告: 仅使用鼠标向上事件有一个问题。如果您将鼠标放在控件上,然后将光标移出控件以释放它,您仍然会触发事件。为了避免这种情况,您还应该确保鼠标松开发生在事件处理程序的控件内。在检查按钮之前检查鼠标光标坐标是否在控件的矩形内即可正确完成。


5
投票

使用 MouseDown 事件

if(e.Button == MouseButton.Right)

2
投票

使用 MouseClick 事件而不是 Click


1
投票

这肯定会对很多人有帮助!

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

[ e.nbutton==2 ] 就像 [ e.button==MouseButtons.Right ]


0
投票

此代码是正确的:

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

0
投票

在点击方法中,将

EventArgs e
更改为
MouseEventArgs e

这是代码:

private void pictureBox1_Click(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
       MessageBox.Show("Left click");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.