2017-08-31 8 views
0

マウスがマップ上にあるときにKeyUpイベントをキャプチャしようとしています。 GMapsライブラリを使用しています。VBHouseのMouseHoverイベントでKeyUpイベントをスローする

マップが配置されているgmapコントロールのkeypress、keydown、およびkeyupイベントを使用しようとしましたが、フォームイベントからkeypress、keydown、およびkeyupを使用しようとしましたが、何も起こりません。

私のフォームでは、いくつかのボタンもあります。行キーの1つを押すと、フォーカスがボタン間で変化していることがわかります。矢印を使用してボタンを選択したいのと同じですなぜなら、私がプログラムのキーイベントに特定のコードを持っていれば、私はなぜそうしているのか分かりません。

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 

、何も...

誰かがこれを行うためのいくつかのアイデアを持っているのでしょうか?

ありがとうございます!

答えて

0

申し訳ありませんが、私は答えを見つけ続けていると私は、私はプロパティを使用することにより、このスレッドで https://social.msdn.microsoft.com/Forums/windows/en-US/ffeeea42-f6ba-420f-827e-74879fd29b26/how-to-detect-arrow-keys-in-vbnet?forum=winforms

探していたものの応答を発見した:のLoadメソッドで

Me.KeyPreview = True 

をフォーム、およびフォームの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プロパティを使用しません。

誰かが私にこの2行を使ってなぜ私が望む振る舞いをしているのか、それを使わずになぜ私はそれをすることができなかったのか説明できますか?

ありがとうございます!

+0

KeyUpイベントは通常、現在フォーカスがあるコントロールでのみ発生します。 'KeyPreview = True'を設定すると、フォームはキーストロークを最初に取得します。 – SSS

+0

ありがとう@SSS!この場合、e.Handled = trueとするとどんな効果がありますか? –

+0

'e.Handled = True'は' KeyUp'イベントを処理するフォーカスを持つコントロールを停止します。 https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(System.Windows.Forms.Control.KeyUp);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5.2を参照してください。 ); k(DevLang-VB)&rd = true – SSS

関連する問題