我正在尝试检测控件的左右鼠标移动 - 就像您可以使用delta来上/下移动一样。有人能帮忙吗?谢谢。如何检测鼠标是否移动到左侧或右侧?
If e.x > 0 Then 'moved right
msgbox("Moved right!")
else 'moved left
msgbox("Moved left!")
End If
我正在尝试检测控件的左右鼠标移动 - 就像您可以使用delta来上/下移动一样。有人能帮忙吗?谢谢。如何检测鼠标是否移动到左侧或右侧?
If e.x > 0 Then 'moved right
msgbox("Moved right!")
else 'moved left
msgbox("Moved left!")
End If
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
下手
这工作非常感谢。 – dave88
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
谢谢你的建议,但我无法得到这个工作。 – dave88
@ dave88你必须有一个按钮才能工作。 –
我使用定时器,我也得到了良好的效果
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
感谢这一点,但我想尽可能避免使用计时器。 – dave88
其中的代码你试过吗?你在消费什么事件? – Plutonix
e.x总是正数(除非按住鼠标) –
e - MouseEvent参数显示**当前**位置。将e.x和e.y保存到模块级变量中,以便将e.X与oldLocation.X进行比较。 – Plutonix