7

有没有一种方法可以在控件 DoubleClick 事件中获取鼠标光标的 (x, y) 坐标?

据我所知,该位置必须从全局获得:

Windows.Forms.Cursor.Position.X、Windows.Forms.Cursor.Position.Y

另外,有没有办法获得哪个按钮产生了双击?

4

3 回答 3

15

使用MouseDoubleClick事件而不是 DoubleClick 事件。MouseDoubleClick 提供 MouseEventArgs 而不是普通的 EventArgs。这适用于“MouseClick”而不是“Click”......以及所有其他处理鼠标的事件。

MouseDoubleClick 确保鼠标确实在那里。DoubleClick 可能是由其他原因引起的,鼠标坐标可能没有用 - MSDN:“DoubleClick 事件在逻辑上是控件的更高级别事件。它们可能由其他用户操作引发,例如快捷键组合。”

于 2010-08-04T04:18:48.573 回答
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 中也有左键或右键。

于 2009-03-27T18:25:41.510 回答
6

Control.MousePosition 和 Control.MouseButtons 是您正在寻找的。使用 Control.PointToClient() 和 Control.PointToScreen() 在屏幕和控件的相对坐标之间进行转换。

有关详细信息,请参阅 MSDN Control.MouseButtons PropertyControl.MousePosition PropertyControl.PointToClient MethodControl.PointToScreen Method


更新

不要只见树木不见森林...... :D 查看Moose 的回答并查看事件参数。

MSDN 文章列出了哪些鼠标操作会根据控件触发哪些事件。

更新

我错过了 Moose 的演员阵容,所以这行不通。您必须使用 Control.DoubleClick() 内部的静态控件属性。因为按钮信息被编码为位字段,所以您必须使用所需的按钮进行如下测试。

(Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left
于 2009-03-27T18:18:37.003 回答