获取鼠标点击DoubleClick事件的位置/按钮

时间:2009-03-27 18:16:44

标签: .net winforms double-click

是否有方法在控件DoubleClick事件中获取鼠标光标的(x,y)坐标?

据我所知,这个位置必须从全球获得:

Windows.Forms.Cursor.Position.X, Windows.Forms.Cursor.Position.Y

另外,有没有一种方法可以获得哪个按钮产生双击?

3 个答案:

答案 0 :(得分:14)

使用 MouseDoubleClick 事件而不是DoubleClick事件。 MouseDoubleClick提供MouseEventArgs而不是普通的EventArgs。这适用于“MouseClick”而非“Click”以及所有其他处理鼠标的事件。

MouseDoubleClick确保鼠标确实在那里。 DoubleClick可能会引起其他问题,鼠标坐标可能没用 - MSDN: “DoubleClick事件在逻辑上是控件的更高级别事件。它们可能由其他用户操作引发,例如快捷键组合。”

答案 1 :(得分:10)

注意:正如danbruc指出的那样,这对UserControl不起作用,因为e不是MouseEventArgs。另请注意,并非所有控件都会为您提供DoubleClick事件 - 例如,Button会向您发送两个Click事件。

  private void Form1_DoubleClick(object sender, EventArgs e)
   {
       MouseEventArgs me = e as MouseEventArgs;

       MouseButtons buttonPushed = me.Button;
       int xPos = me.X;
       int yPos = me.Y;
   }

获取相对于表单的x,y ..

还有MouseEventArgs中的左或右按钮。

答案 2 :(得分:6)

Control.MousePosition和Control.MouseButtons是您正在寻找的。使用Control.PointToClient()和Control.PointToScreen()在屏幕和控件相对坐标之间进行转换。

有关详细信息,请参阅MSDN Control.MouseButtons PropertyControl.MousePosition PropertyControl.PointToClient MethodControl.PointToScreen Method


<强>更新

不要看树木......:D见Moose's回答并查看事件参数。

MSDN article列出了哪些鼠标操作会根据控件触发哪些事件。

<强>更新

我错过了穆斯的演员,所以这不会奏效。您必须使用Control.DoubleClick()内部的静态Control属性。因为按钮信息被编码为位字段,您必须使用所需的按钮进行如下测试。

(Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left