在VB.NET中的MouseHover事件中抛出KeyUp事件

时间:2017-08-31 06:14:34

标签: vb.net events

当鼠标悬停在地图上时,我正在尝试捕获KeyUp事件。我正在使用GMaps库。

我尝试过使用gmap控件的keypress,keydown和keyup事件(放置地图的地方),我尝试使用表单事件中的keypress,keydown和keyup,但没有任何反应。

在我的表单中,我还有一些按钮,当我按下其中一个行键时,我看到的是焦点在按钮之间变化,效果就好像你想用箭头选择一个按钮键盘,如果我在程序的关键事件中有特定代码,我不知道为什么这样做。

在MouveHover事件中,我正在使用此代码:

Private Sub GMapControl_MouseHover(sender As Object, e As EventArgs) Handles GMapControl.MouseHover
    If Keys.Up <> Keys.None Then
        GMapControl.Position = New PointLatLng(GMapControl.Position.Lat + 1, GMapControl.Position.Lng)
    End If
End Sub

但我没有找到我想要的行为。此外,我正在尝试使用以下形式的KeyUp事件:

Private Sub BMS_KeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp
    If e.KeyCode.ToString = "Up" Then
        GMapControl.Position = New PointLatLng(GMapControl.Position.Lat + 1, GMapControl.Position.Lng)
    ElseIf e.KeyCode.ToString = "Down" Then
        GMapControl.Position = New PointLatLng(GMapControl.Position.Lat - 1, GMapControl.Position.Lng)
    ElseIf e.KeyCode.ToString = "Left" Then
        GMapControl.Position = New PointLatLng(GMapControl.Position.Lat, GMapControl.Position.Lng - 1)
    ElseIf e.KeyCode.ToString = "Right" Then
        GMapControl.Position = New PointLatLng(GMapControl.Position.Lat, GMapControl.Position.Lng + 1)
    End If
End Sub

此外,我在GMap控件的KeyUp事件中尝试过相同的操作:

Private Sub GMapControl_KeyUp(sender As Object, e As KeyEventArgs) Handles GMapControl.KeyUp
    If e.KeyCode.ToString = "Up" Then
        GMapControl.Position = New PointLatLng(GMapControl.Position.Lat + 1, GMapControl.Position.Lng)
    ElseIf e.KeyCode.ToString = "Down" Then
        GMapControl.Position = New PointLatLng(GMapControl.Position.Lat - 1, GMapControl.Position.Lng)
    ElseIf e.KeyCode.ToString = "Left" Then
        GMapControl.Position = New PointLatLng(GMapControl.Position.Lat, GMapControl.Position.Lng - 1)
    ElseIf e.KeyCode.ToString = "Right" Then
        GMapControl.Position = New PointLatLng(GMapControl.Position.Lat, GMapControl.Position.Lng + 1)
    End If
End Sub

没什么......

也许有人有想法这样做?

谢谢!

1 个答案:

答案 0 :(得分:0)

对不起,我一直在寻找答案,我已经找到了我在这个帖子上寻找的答案 https://social.msdn.microsoft.com/Forums/windows/en-US/ffeeea42-f6ba-420f-827e-74879fd29b26/how-to-detect-arrow-keys-in-vbnet?forum=winforms

使用属性:

Me.KeyPreview = True

在表单的Load方法中,并在表单的KeyUp中使用此代码:

Private Sub BMS_KeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp
    Select Case e.KeyCode
        Case Keys.Right
            GMapControl.Position = New PointLatLng(GMapControl.Position.Lat, GMapControl.Position.Lng + 0.1)
            e.Handled = True
        Case Keys.Left
            GMapControl.Position = New PointLatLng(GMapControl.Position.Lat, GMapControl.Position.Lng - 0.1)
            e.Handled = True
        Case Keys.Up
            GMapControl.Position = New PointLatLng(GMapControl.Position.Lat + 0.1, GMapControl.Position.Lng)
            e.Handled = True
        Case Keys.Down
            GMapControl.Position = New PointLatLng(GMapControl.Position.Lat - 0.1, GMapControl.Position.Lng)
            e.Handled = True
    End Select
End Sub

无论如何,我想问一件我不明白的事情。我之前尝试过此操作,但没有使用 Me.KeyPreview 属性,也没有使用 e.Handled = true 属性。

有人可以向我解释为什么使用这两行我有我想要的行为,为什么不使用它们我无法做到?

谢谢!