私のアプリケーションでは、ユーザーが右矢印キーを押しながらを使用して映画をスクロールできるようにしますProcessCmdKey
。ここで、ユーザーが必要に応じてスクロール速度を上げることができるようにしたいと思います。理想的には、ユーザーは右矢印キーを押したままにする必要があります。次に、右矢印キーを離さずに速度を上げる場合は、 Shiftキーも押したままにし、通常の速度に戻す場合は、Shiftキーを放すだけです。したがって、スクロール速度の違いは、右矢印キーの圧力に追加または削除する必要があるShiftキー修飾子からのみ指定する必要があります。
このようなコードを試しましたが、成功しませんでした(このテスト例では、フォームに単純なラベルがあります)。
int count = 0;
bool keyRightDown = false;
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Right)
{
keyRightDown = true;
count++;
label.Text = "count = " + count.ToString();
return true;
}
if (keyData == (Keys.Shift | Keys.ShiftKey) && keyRightDown)
{
count += 10;
label.Text = "count = " + count.ToString();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
protected override bool ProcessKeyMessage(ref Message m)
{
if ((Keys)m.WParam == Keys.Right)
{
if (m.Msg == 0x101) // KEYUP
{
keyDown = false;
return true;
}
}
return base.ProcessKeyMessage(ref m);
}
ユーザーがShiftキーを右矢印に追加すると、期待どおりにが含まれてkeyData
いませんが、 。ただし、この問題はブール値によって解決できます。主な問題は、ユーザーがこの時点で右矢印のみを押してShiftキーを離すと、他の呼び出しもトリガーもされないことです。どうすれば目標を達成できますか?(Keys.Shift | Keys.Right)
(Keys.Shift | Keys.ShiftKey)
keyRightDown
ProcessCmdKey
ProcessKeyMessage