有没有一种方法可以在控件DoubleClick事件中获取鼠标光标的(x,y)坐标?
据我所知,这个位置必须从全球获得:
Windows.Forms.Cursor.Position.X, Windows.Forms.Cursor.Position.Y
另外,有没有一种方法可以获得哪个按钮产生了双击?
使用MouseDoubleClick事件而不是DoubleClick事件.MouseDoubleClick提供MouseEventArgs而不是普通的EventArgs.这适用于"MouseClick"而非"Click"以及所有其他处理鼠标的事件.
MouseDoubleClick确保鼠标确实在那里.DoubleClick可能会引起其他问题,鼠标坐标可能没用 - MSDN:"DoubleClick事件是控件的逻辑上更高级别的事件.它们可能会被其他用户操作引发,例如快捷键组合."
注意:正如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中还有左或右按钮.
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