【发布时间】:2012-02-18 13:29:36
【问题描述】:
在控件DoubleClick事件中有没有获取鼠标光标(x,y)坐标的方法?
据我所知,位置必须从全局获得:
Windows.Forms.Cursor.Position.X、Windows.Forms.Cursor.Position.Y另外,有没有办法获取哪个按钮产生了双击?
【问题讨论】:
标签: .net winforms double-click
在控件DoubleClick事件中有没有获取鼠标光标(x,y)坐标的方法?
据我所知,位置必须从全局获得:
Windows.Forms.Cursor.Position.X、Windows.Forms.Cursor.Position.Y另外,有没有办法获取哪个按钮产生了双击?
【问题讨论】:
标签: .net winforms double-click
使用 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's 答案并查看事件参数。
这个MSDN article 列出了哪些鼠标操作会根据控件触发哪些事件。
更新
我错过了 Moose 的演员阵容,所以这不起作用。您必须使用 Control.DoubleClick() 内部的静态控件属性。由于按钮信息被编码为位字段,因此您必须使用所需的按钮进行如下测试。
(Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left
【讨论】: