こんにちは。
コンボボックスのKeyDownイベントで、キーを
押さなかったことにするにはどのような方法があるのでしょうか?
コンボボックス内の項目を選択した後、
Enterキーで別のテキストボックスにフォーカスを移そうとしているのですが、
フォーカスが移った時にビープが鳴ってしまいます。
このビープを消すには、キーを押さなかったことにし、フォーカスだけ
移せばいいと思ったのですが、方法を見つけることができません。
どなたかご教授ください。
>別のテキストボックスにフォーカスを移そうとしているのですが、フォーカスが移った時にビープが鳴ってしまいます。
これについては、APIを使用するしか方法がありません。
「SystemParametersInfo」を調べて見てください。
>KeyDownイベントで、キーを押さなかったことにする
.NETであれば、「e.Handled = True」でイベントのキャンセルができます。
同じ条件で試した事がないのですがKeyDownプロシージャの
中で試してみてください。
If KeyCode = vbEnter Then
KeyCode = 0
End If
レスありがとうございます。
>クリリンさん
なるほど、e.Handled = Trueは記述していたのですが、
イベントのキャンセルとは違うところからなっているようですね。
>Take1さん
すいません、私の記述漏れでバージョンは.Netなのです。
KeyCode = 0は真っ先に思いつき記述したのですが、
.NetはKeyCodeは読み取り専用のようです。
お二人、ありがとうございました。
参考までに・・・
' システムに関するパラメータを取得/設定するAPI関数
<DllImport("user32")> Private Function SystemParametersInfo( _
ByVal uAction As UInt32, _
ByVal uParam As UInt32, _
<MarshalAs(UnmanagedType.LPStr)> ByVal lpvParam As String, _
ByVal fuWinIni As UInt32) As Boolean
End Function
' SystemParametersInfoの呼び出し時に使用する定数
Private SPI_SETBEEP As UInt32 = Convert.ToUInt32(2) '警告ビープ音を設定
'Beep音を鳴らさないようにする
Call SystemParametersInfo(SPI_SETBEEP, Convert.ToUInt32(0), Nothing, Convert.ToUInt32(0))
ComboBox(あるいはForm)のPreProcessMessageをオーバライドしてみてください。
Public Overrides Function PreProcessMessage(ByRef msg As System.Windows.Forms.Message) As Boolean
Const WM_KEYDOWN As Integer = &H100
If msg.Msg = WM_KEYDOWN AndAlso (msg.WParam.ToInt32() And Keys.KeyCode) = Keys.Enter Then
'ここに、Enterキーが押された時の処理を記述。
'例えば、『RaiseEvent PressEnter()』みたいにして
'独自のイベントを発生させてみても良いかも。
Return True
Else
Return False
End If
End Function
おぉ、サンプルが・・・ありがとうございます。
で・・・日が浅いものでわからないのですが、
クリリンさん、魔界の仮面弁士さんのソースは
どこに記述したらよいのですか?
ツイート | ![]() |