キーを押さなかったことにするには?

解決


kaku  2003-08-20 01:45:00  No: 108167  IP: [192.*.*.*]

こんにちは。

コンボボックスのKeyDownイベントで、キーを
押さなかったことにするにはどのような方法があるのでしょうか?

コンボボックス内の項目を選択した後、
Enterキーで別のテキストボックスにフォーカスを移そうとしているのですが、
フォーカスが移った時にビープが鳴ってしまいます。
このビープを消すには、キーを押さなかったことにし、フォーカスだけ
移せばいいと思ったのですが、方法を見つけることができません。

どなたかご教授ください。

編集    削除
クリリン  2003-08-20 02:44:31  No: 108168  IP: [192.*.*.*]

>別のテキストボックスにフォーカスを移そうとしているのですが、フォーカスが移った時にビープが鳴ってしまいます。
これについては、APIを使用するしか方法がありません。
「SystemParametersInfo」を調べて見てください。

>KeyDownイベントで、キーを押さなかったことにする
.NETであれば、「e.Handled = True」でイベントのキャンセルができます。

編集    削除
Take1  2003-08-20 02:51:55  No: 108169  IP: [192.*.*.*]

同じ条件で試した事がないのですがKeyDownプロシージャの
中で試してみてください。

If KeyCode = vbEnter Then
      KeyCode = 0
End If

編集    削除
kaku  2003-08-20 03:05:13  No: 108170  IP: [192.*.*.*]

レスありがとうございます。

>クリリンさん
なるほど、e.Handled = Trueは記述していたのですが、
イベントのキャンセルとは違うところからなっているようですね。

>Take1さん
すいません、私の記述漏れでバージョンは.Netなのです。
KeyCode = 0は真っ先に思いつき記述したのですが、
.NetはKeyCodeは読み取り専用のようです。

お二人、ありがとうございました。

編集    削除
クリリン  2003-08-20 03:14:17  No: 108171  IP: [192.*.*.*]

参考までに・・・

' システムに関するパラメータを取得/設定する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))

編集    削除
魔界の仮面弁士  2003-08-20 08:47:46  No: 108172  IP: [192.*.*.*]

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

編集    削除
kaku  2003-08-20 18:44:11  No: 108173  IP: [192.*.*.*]

おぉ、サンプルが・・・ありがとうございます。

で・・・日が浅いものでわからないのですが、
クリリンさん、魔界の仮面弁士さんのソースは
どこに記述したらよいのですか?

編集    削除