|
修飾キー(Shift, Ctrl, Alt)以外の通常キー同士の同時押しを、
WinFormはライブラリとしてはサポートしていません。
Keys列挙体での通常キー同士のOrは不正な値になります。
敢えて書くなら、次のようなコードになるでしょうか。
' 同時押し対象のキーが多いならDictionaryで管理する
Dim m_Up As Boolean, m_Down As Boolean
Sub Form1_KeyDown(...) As Me.KeyDown
SetKeyState(e.Keycode, True)
' 以後、必要な処理
End Sub
Sub Form1_KeyUp(...) As Me.KeyUp
SetKeyState(e.KeyCode, False)
End Sub
Sub SetKeyState(ByVal key As Keys, ByVal holding As Boolean)
Select Case e.KeyCode
Case Keys.Up
Me.m_Up = holding
Case Keys.Down
Me.m_Down = holding
End Select
End Sub
ちなみに、入力開始時点では、必ずどちらかのキーが先行します。
例え完全に同じタイミングで2つのキーを押下したとしても、
KeyDownは先にどちらかのキーで発生し、その後残りのキーで発生します。
|