トップ回答者
スクロールバーがキーボードイベントを受け取らないようにするには?

質問
回答
-
ニムファエア さん、こんにちは
ダッチです。
ニムファエア さんからの引用 キーボードからの入力は別処理で利用するつもりです。 例えば、次のようにしてやると PageDown キーを無効化できます。
PageDown キー無効サンプルprotected override bool ProcessCmdKey( ref Message msg, Keys keyData )
{
if (( keyData & Keys.KeyCode ) == Keys.PageDown)
{
return true;
}
return base.ProcessCmdKey( ref msg, keyData );
}
すべての返信
-
ニムファエア さん、こんにちは
ダッチです。
ニムファエア さんからの引用 キーボードからの入力は別処理で利用するつもりです。 例えば、次のようにしてやると PageDown キーを無効化できます。
PageDown キー無効サンプルprotected override bool ProcessCmdKey( ref Message msg, Keys keyData )
{
if (( keyData & Keys.KeyCode ) == Keys.PageDown)
{
return true;
}
return base.ProcessCmdKey( ref msg, keyData );
} -
ダッチ様、早速のご解答ありがとうございます。
ダッチ さんからの引用 これをどのようにしてやろうとしているのかが不明ですが、新しくスクロールバーを継承したコントロールを作成し、そのコントロールで ProcessCmdKey メソッドをオーバーライドしてやればできますよ。
ダッチ様に提示していただいたコードを参考に以下のコードで希望通りの動作を確認できました。
キーイベントのオーバーライドprotected override bool ProcessCmdKey( ref Message msg, Keys keyData )
{
switch( keyData ) {
case Keys.Up:// 行いたい処理
break;
case Keys.Down:// 行いたい処理
break;
default:
return base.ProcessCmdKey( ref msg, keyData );
}return true;
} -
ダッチ様、アドバイスありがとうございますw
ダッチ さんからの引用 ここの部分ですが
switch( keyData ) {
これだと Control キーなどと一緒に Up キーを押された場合は無効化できません。
なので一旦 keyData から KeyCode を抽出してその結果と Up キーなどを比べる必要があります。この部分に関しましては、
今回作成しているソフトはShift、Ctrl、Altキーとの同時押しを必要とする処理以外は、
たとえ押されていても押されていない場合の処理を行うように作成しているため、
システムキーとの同時押し判定はcase文の中で行っています。
紛らわしくてすみません ^ ^;
C#を始めて日が浅い上に、まだコードの確認が済んでいないので
また疑問が湧きましたらご質問させてください♪