■92988 / ) |
キーボードを押した時に二重実行を防止するには |
□投稿者/ けーえんす (1回)-(2019/11/12(Tue) 15:47:23)
|
分類:[.NET 全般]
キーボードの矢印キーを押すと、Trackbarが移動するとともに、ある重い処理が実行されるプログラムを書いています。
一回ずつキーを押した場合には問題ないのですが、
矢印キーを押しっぱなしにした時に、キーを離してもしばらく処理が何度も実行されるという現象が起きています。
これを回避するために、ブーリアン変数で排他的に処理できるようにしてあるのですが、
それでもやはりうまくいきません、
コードは以下の通りです。
恐らく、2回目以降のキーの実行はArrowKeyMovementが実行される前の段階でキュー待ちような状態になっているのではないかと思います。
どうすれば良いでしょうか?
AddHandler TrackBar1.KeyDown, AddressOf CursorMovementKeyDown
Private Sub CursorMovementKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
e.Handled = ArrowKeyMovement(e.KeyCode)
End Sub
Dim FrameChangingBool As Boolean = False
Function ArrowKeyMovement(keyCode As Keys) As Boolean
If FrameChangingBool = False Then
FrameChangingBool = True
Select Case keyCode
Case Keys.Left
Dim SetValue As Integer = TrackBar1.Value - 1
If SetValue >= TrackBar1.Minimum Then
TrackBar1.Value = SetValue
End If
FrameChangingBool = False
Return True
Case Keys.Right
Dim SetValue As Integer = TrackBar1.Value + 1
If SetValue <= TrackBar1.Maximum Then
TrackBar1.Value = SetValue
End If
FrameChangingBool = False
Return True
Case Else
FrameChangingBool = False
Return False
End Select
Else
Select Case keyCode
Case Keys.Left, Keys.Right
Return True
Case Else
Return False
End Select
End If
End Function
Private Sub TrackBar1_ValueChanged(sender As Object, e As EventArgs) Handles TrackBar1.ValueChanged
’ 重い処理
End Sub
|
|