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