C#右键单击按钮不会触发鼠标点击事件。

7
我有一个表单上的按钮,想要处理左右点击事件。
我正在处理MouseClick事件,但这只会在左键单击时触发。
这是我的代码中的问题(我错过了某个设置)还是预期功能?
如果无法解决此问题,最好的解决方法是什么 - 处理MouseUp事件?
我想使用MouseClick的原因是可以自动识别双击。
感谢任何反馈。

OnClick 处理左右点击事件。http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.click.aspx - Matt Evans
只有焦点控件接收输入事件。也许它在某个地方改变了? - foowtf
点击按钮肯定会使它成为焦点控件吧? - Mark
那个链接肯定说对于按钮,右键单击不会调用“Click”事件,是吗? - Mark
1
不,许多控件无法获得焦点,比如标签或图片框。不要把你单击的控件类型保密。 - Hans Passant
好的,我没有意识到。谢谢。但是为什么你会有一个按钮,除非先前聚焦,否则无法生成点击事件?你认为这可能是问题所在,如果是的话,如何克服这个问题? - Mark
3个回答

15

使用 MouseUp 事件!

    private void button6_MouseUp(object sender, MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            MessageBox.Show("LEFT");
        }
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
        {
            MessageBox.Show("RIGHT");
        }
    }

6
显然,OnClick不处理Button的右键单击事件。因此,解决方案是使用MouseUp/MouseDown并手动检查双击/鼠标在一半时移动的单击。

6

没有代码很难回答,但一般而言应该可以正常工作。

 private void Form1_MouseClick(object sender, MouseEventArgs e)
{
  if (e.Button == System.Windows.Forms.MouseButtons.Left)
  {
    MessageBox.Show("LEFT");
  }
  if (e.Button == System.Windows.Forms.MouseButtons.Right)
  {
    MessageBox.Show("RIGHT");
  }
}

//事件处理程序

 this.MouseClick += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseClick);

编辑:有一个MouseDoubleClick事件,您可能希望使用它来识别双击。适用于左右鼠标按钮。


这基本上就是我所拥有的 - 除了更简单(我不检查按哪个按钮 - 我只是在每个“MouseClick”事件上有一个消息框),但只有当我使用右键时才会触发。 - Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接