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

わんくま同盟

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

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


■97097 / )  矢印キーが押されている時だけシフトキーを無効にする
□投稿者/ レタス (1回)-(2021/03/26(Fri) 20:19:03)

分類:[.NET 全般] 

VB.NETを使用しております。

画像ビューアのようなものを作成していまして、
矢印キーを押すと画像が入れ替わるような仕様になっています。

更に、シフトキーを押しながら、矢印キーを押すと早送り(1フレーム飛ばし)で画像が入れ替わるようにしています。

一応、そこまでは以下のコードでうまくいっているのですが、
一つだけ問題があります。

先にシフトキーを押してから、矢印キーを押すとうまく動作するのですが、
矢印キーを押した状態でシフトキーを押すと
フレーム送りの動作が停止してしまい、再度、矢印キーを押し直す必要があります。

そのため、矢印キーを押している間だけシフトキーを押しても
矢印キーの動作が止まらないようにしたいのですが
どのようにすれば良いでしょうか?

以下はコードの抜粋です。

フォーム生成時に、
CursorMovementKeyDownは全てのコントロールのKeydownに対して、
再帰的にAddHandlerされています。



    Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean

        If (keyData And Keys.KeyCode) = Keys.Shift Then

		’シフトキーが押されていると抜けたいがそれでも矢印キーはキャンセルされてしまう
            Return True

        End If

        If FrameChange(keyData And Keys.KeyCode) = True Then

            Return True

        Else

            Return MyBase.ProcessDialogKey(keyData)

        End If

    End Function


    Private Sub CursorMovementKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)


        If e.KeyCode = Keys.ShiftKey Then

		’シフトキーが押されていると抜けたいがそれでも矢印キーはキャンセルされてしまう
            e.Handled = True
            Exit Sub

        End If


        e.Handled = FrameChange(e.KeyCode)


    End Sub




    Function FrameChange(keyCode As Keys) As Boolean

            Dim incre As Integer = 1

		’シフトキーが押されていると増分を2に変更する
            If Control.ModifierKeys = Keys.Shift Then
                incre = 2
            End If

	画像を変更するコード		


    End Sub

返信 編集キー/


管理者用

- Child Tree -