是否有方法在控件DoubleClick事件中获取鼠标光标的(x,y)坐标?
据我所知,这个位置必须从全球获得:
Windows.Forms.Cursor.Position.X, Windows.Forms.Cursor.Position.Y
另外,有没有一种方法可以获得哪个按钮产生双击?
答案 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 Property,Control.MousePosition Property,Control.PointToClient Method和Control.PointToScreen Method。
<强>更新强>
不要看树木......:D见Moose's回答并查看事件参数。
此MSDN article列出了哪些鼠标操作会根据控件触发哪些事件。
<强>更新强>
我错过了穆斯的演员,所以这不会奏效。您必须使用Control.DoubleClick()内部的静态Control属性。因为按钮信息被编码为位字段,您必须使用所需的按钮进行如下测试。
(Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left