2014-02-12 168 views
0

我正在尝试检测控件的左右鼠标移动 - 就像您可以使用delta来上/下移动一样。有人能帮忙吗?谢谢。如何检测鼠标是否移动到左侧或右侧?

If e.x > 0 Then 'moved right 
msgbox("Moved right!") 
else 'moved left 
msgbox("Moved left!") 
End If 
+1

其中的代码你试过吗?你在消费什么事件? – Plutonix

+0

e.x总是正数(除非按住鼠标) –

+0

e - MouseEvent参数显示**当前**位置。将e.x和e.y保存到模块级变量中,以便将e.X与oldLocation.X进行比较。 – Plutonix

回答

1
Private oldXY As Point = Point.Empty 

Private Sub Form1_MouseMove(sender As Object, 
     e As MouseEventArgs) Handles Me.MouseMove 

    If e.X < oldXY.X Then 
     ' .... 
    ElseIf e.X > oldXY.X Then 
     ' ... 
    End If 
    oldXY.X = e.X 
    oldXY.Y = e.Y 
End Sub 

你可能会想,这样你不误报第一鼠标移动到增加一个测试Point.Empty。或尝试将其初始化为Cursor.Position下手

+0

这工作非常感谢。 – dave88

0
Private firstTime As Boolean = False 
Private oldX As Integer 

Private Sub Button1_MouseEnter(sender As System.Object, e As System.EventArgs) Handles Button1.MouseEnter 
    firstTime = True 
End Sub 

Private Sub Button1_MouseMove(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseMove 
    If firstTime = True Then 
     firstTime = False 
    Else 
     If e.X > oldX Then 
      'moves right 
     ElseIf e.X < oldX Then 
      'moves left 
     End If 
    End If 

    oldX = e.X 
End Sub 
+0

谢谢你的建议,但我无法得到这个工作。 – dave88

+0

@ dave88你必须有一个按钮才能工作。 –

0

我使用定时器,我也得到了良好的效果

Dim lx As Integer = 0 ' last x position 
Dim ly As Integer = 0 ' last y position 

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
    Dim x As Integer = MousePosition.X 
    Dim y As Integer = MousePosition.Y 
    Dim s As String = "" 
    If x > lx Then 
     s &= "Right," 
    ElseIf x < lx Then 
     s &= "Left," 
    ElseIf x = lx Then 
     s &= "No Change," 
    End If 
    If y > ly Then 
     s &= "Down" 
    ElseIf y < ly Then 
     s &= "Top" 
    ElseIf y = ly Then 
     s &= "No Change" 
    End If 
    lx = x 
    ly = y 
    Label1.Text = s 
End Sub 
+0

感谢这一点,但我想尽可能避免使用计时器。 – dave88

相关问题