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

use*_*755 6 .net double-click winforms

有没有一种方法可以在控件DoubleClick事件中获取鼠标光标的(x,y)坐标?

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

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

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

小智 14

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

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


Moo*_*ose 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;
   }
Run Code Online (Sandbox Code Playgroud)

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

MouseEventArgs中还有左或右按钮.


Dan*_*ner 6

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

有关详细信息,请参阅MSDN Control.MouseButtons属性,Control.MousePosition属性,Control.PointToClient方法Control.PointToScreen方法.


UPDATE

不要看树木了......:D看到穆斯的回答并看看事件的论点.

MSDN文章列出了哪些鼠标操作会根据控件触发哪些事件.

UPDATE

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

(Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left
Run Code Online (Sandbox Code Playgroud)