2017-03-09 10 views
1

私は受け入れるコンボボックスを編集領域から選択して入力します。私はこれが最善の方法かどうかはわかりませんが、ここで答えた他の質問に基づいて、 'Tab'に 'Enter'をマッピングするComboBox_KeyPressルーチンを追加しました。VB ComboBoxが 'Enter'を受け付けません

Private Sub MyCB_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyCB.KeyPress 
     Dim tb As ComboBox = CType(sender, ComboBox) 
     If Char.IsControl(e.KeyChar) Then 
      If e.KeyChar.Equals(Chr(Keys.Return)) Then 
      Me.SelectNextControl(tb, True, True, False, True) 
      e.Handled = True 
      End If 
     End If 
End Sub 

コンボボックスのドロップダウン部分を選択した場合は、テキストを入力してEnterキーを押します。ただし、ボックスのテキスト編集部分を選択し、テキストを入力してEnterキーを押すと、MyCB_KeyPressは呼び出されません。

私は間違っていますか?

+0

コードが私のために働く。 – LarsTech

+0

それは私が設定する必要がある(または設定しない)いくつかのプロパティがあると信じさせる。私は関連しているように見える様々なプロパティを試してきましたが、この時点では何もこの動作を変更していません。 –

+0

新しいプロジェクトで問題を再現してみてください。 – LarsTech

答えて

0

イベントKeyDownは、e.KeyCode自体がKeysであるため、キャプチャ(およびキーの読み取り)を試みるときに使いやすくなっています。

さらに、フォームのプロパティでコンボボックスのコンテナ(フォーム)のKeyPreviewTrueに設定することを検討してください。私ははるかに近い取得するための@Alex M.へ

Private Sub MyCB_KeyDown(sender As Object, e As KeyEventArgs) Handles MyCB.KeyDown 
    Dim tb As ComboBox = CType(sender, ComboBox) 
    If e.KeyCode = Keys.Enter Then 
     Me.SelectNextControl(tb, True, True, False, True) 
     e.Handled = True 
     'e.SuppressKeyPress = True - To remove that "beeping" when enter is hit. 
    End If 
End Sub 
0

ありがとう:私の最初のポイントを考え

は、あなたがこれを行うことができます!私が発見したのは、このケースではKeyPressもKeyDownも呼び出されないということです。 KeyPreviewプロパティはその動作に影響を与えませんでした。 が呼び出されるのはKeyUpです。だからこれはうまくいった:

Private Sub MyCB_KeyUp(sender As Object, e As KeyEventArgs) Handles MyCB.KeyUp 
    Dim cb As ComboBox = CType(sender, ComboBox) 
    If e.KeyCode = Keys.Enter Then 
     Me.SelectNextControl(cb, True, True, False, True) 
     e.Handled = True 
    End If 
End Sub 
関連する問題