トップ回答者
KeyDown時の無効音を消すには

質問
回答
-
「@IT」
Deer327 さんからの引用 試しに以下のコードで実行してみたんですが、
どのキーストロークでもメソッドが呼び出されませんでした。Protected Shadows Function ProcessCmdKey( _
(省略)
加えて下記のような記事を読みますと(@IT.NET TIPSの記事より引用)
> フォームやコントロール側で完全にキー処理を制御するには
> (つまり、デフォルト処理を一切行わない場合)、プリプロセスの
> ProcessCmdKeyメソッドをオーバーライドするとよいだろう。うーん...
コードが動かない以前に、どうも私には敷居が高いような気がします。
あきらめるのもくやしいですけど。
- 「Windowsアプリケーションでキー処理が行われる順序は?」
- 「Windowsアプリケーションで方向キーなどの特殊キーを処理するには?」
多分、この辺の記事の事をおっしゃているのでしょうけど、
もう少しじっくり読んでみましょう。
あと、知らない(分からない)キーワードが出てきたら、
先ずは、ドキュメントを読む様にしましょう。
# 何事も一朝一夕にはいかないものです。
「MSDN」
- 「Visual Basic 言語リファレンス」
- 「Function ステートメント」
- 「Overrides」
- 「Shadows」- 「サンプル」
- 「コード : コントロールで受け入れるキーストロークを制限する (Visual Basic)」# んー、デフォルトでその様な動作だったかなぁ。Deer327 さんからの引用 ショートカットキーの割当てについては、うまく動作しました。
ですが、これだと制御がボタン側に遷移してしまいます。
できればカスタムコントロール内で制御したいと思っています。オーバーライドについては、ProcessCmdKeyの方が分かれば、こちらも分かりますね。Deer327 さんからの引用 ProcessMnemonicのオーバーライドについては、
スキル不足の為、手法がイメージできず試せませんでした。
「MSDN」
- 「Visual Studio ドキュメント」
- 「クラスと型のデザインおよび表示」
- 「方法 : 型のメンバをオーバーライドする」
すべての返信
-
じゃんぬねっとさん、こんにちは。
いつもありがとうございます。じゃんぬねっと さんからの引用
それより前の段階でキャンセルしてしまうとか。
たとえば、ProcessCmdKey メソッドをオーバーライドして、keyData から捕捉する。試しに以下のコードで実行してみたんですが、
どのキーストロークでもメソッドが呼び出されませんでした。Protected Shadows Function ProcessCmdKey( _
ByRef msg As System.Windows.Forms.Message, _
ByVal keyData As System.Windows.Forms.Keys) As Boolean
If keyData = (Keys.Alt Or Keys.D2) _
Or keyData = (Keys.Alt Or Keys.NumPad2) Then
Return True
RaiseEvent MyDialogCalled(Me, New System.EventArgs)
Else
Return False
End If
End Function加えて下記のような記事を読みますと
(@IT.NET TIPSの記事より引用)
> フォームやコントロール側で完全にキー処理を制御するには
> (つまり、デフォルト処理を一切行わない場合)、プリプロセスの
> ProcessCmdKeyメソッドをオーバーライドするとよいだろう。うーん...
コードが動かない以前に、どうも私には敷居が高いような気がします。
あきらめるのもくやしいですけど。 -
辛島さん、こんにちは。
レスありがとうございます。辛島 さんからの引用
その「ある処理」と同じ処理を行うボタンやメニューが別にあるのであれば、
ショートカット(アクセス) キーを割り当てるか、
ProcessMnemonicをオーバーライドするとか。ショートカットキーの割当てについては、うまく動作しました。
ですが、これだと制御がボタン側に遷移してしまいます。
できればカスタムコントロール内で制御したいと思っています。ProcessMnemonicのオーバーライドについては、
スキル不足の為、手法がイメージできず試せませんでした。
せっかくのご提案をすみません。 -
「@IT」
Deer327 さんからの引用 試しに以下のコードで実行してみたんですが、
どのキーストロークでもメソッドが呼び出されませんでした。Protected Shadows Function ProcessCmdKey( _
(省略)
加えて下記のような記事を読みますと(@IT.NET TIPSの記事より引用)
> フォームやコントロール側で完全にキー処理を制御するには
> (つまり、デフォルト処理を一切行わない場合)、プリプロセスの
> ProcessCmdKeyメソッドをオーバーライドするとよいだろう。うーん...
コードが動かない以前に、どうも私には敷居が高いような気がします。
あきらめるのもくやしいですけど。
- 「Windowsアプリケーションでキー処理が行われる順序は?」
- 「Windowsアプリケーションで方向キーなどの特殊キーを処理するには?」
多分、この辺の記事の事をおっしゃているのでしょうけど、
もう少しじっくり読んでみましょう。
あと、知らない(分からない)キーワードが出てきたら、
先ずは、ドキュメントを読む様にしましょう。
# 何事も一朝一夕にはいかないものです。
「MSDN」
- 「Visual Basic 言語リファレンス」
- 「Function ステートメント」
- 「Overrides」
- 「Shadows」- 「サンプル」
- 「コード : コントロールで受け入れるキーストロークを制限する (Visual Basic)」# んー、デフォルトでその様な動作だったかなぁ。Deer327 さんからの引用 ショートカットキーの割当てについては、うまく動作しました。
ですが、これだと制御がボタン側に遷移してしまいます。
できればカスタムコントロール内で制御したいと思っています。オーバーライドについては、ProcessCmdKeyの方が分かれば、こちらも分かりますね。Deer327 さんからの引用 ProcessMnemonicのオーバーライドについては、
スキル不足の為、手法がイメージできず試せませんでした。
「MSDN」
- 「Visual Studio ドキュメント」
- 「クラスと型のデザインおよび表示」
- 「方法 : 型のメンバをオーバーライドする」 -
辛島さん、こんにちは。
辛島 さんからの引用
「@IT」
- 「Windowsアプリケーションでキー処理が行われる順序は?」
- 「Windowsアプリケーションで方向キーなどの特殊キーを処理するには?」多分、この辺の記事の事をおっしゃているのでしょうけど、
もう少しじっくり読んでみましょう。レスを参考に、以下のコードで動作確認できました。
[VB2005]
Protected Overrides Function ProcessDialogChar( _
ByVal charCode As Char) As Boolean
If charCode = "2" Then
'Alt+2キーでダイアログを表示する
RaiseEvent MyDialogCalled(Me, New System.EventArgs)
Return True
Else
Return MyBase.ProcessDialogChar(charCode)
End If
End Functionキー制御がこんなに奥が深い物とは...再認識しました。
辛島さん & じゃんぬねっとさん、及び@IT.NET Tips担当者さん
ありがとうございました。#もっとドキュメント読み込まないとだめですね。
#耳が痛かったです。m(_ _)m