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



>我有一种方法可以通过双击表单来检测视觉工作室所做的左键单击事件。

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事件处理程序,引用。

switch (e.Button) {
    case MouseButtons.Left:
    // Left click
    break;
    case MouseButtons.Right:
    // Right click
    break;
    ...
}
对我来说,

鼠标单击或单击事件都不起作用,因为简单地说,当您右键单击时不会调用这些事件。快速的方法是:

 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 事件而不是单击

这肯定会帮助很多人!

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

[ e.nbutton==2 ] 就像[ e.button==鼠标按钮.right ]

这段代码是真的:

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

相关内容

  • 没有找到相关文章

最新更新