在控件的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属性。因为按钮信息被编码为位字段,所以您必须按照以下方式进行测试,使用所需的按钮。
(Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left