C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 161 を表示中)
■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

返信 編集キー/


管理者用

- Child Tree -