VB ComboBox不接受'输入'

时间:2017-03-09 20:10:39

标签: vb.net combobox

我有一个我想接受的组合框从编辑区输入作为选择。我不知道这是否是最佳方式,但根据此处回答的其他问题,我添加了一个ComboBox_KeyPress例程来映射'输入'到' Tab'。

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永远不会被调用。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

当您尝试捕获(并读取密钥)时,事件KeyDown更容易使用,因为e.KeyCode本身就是Keys

此外,请考虑在表单属性中将ComboBox容器(表单)上的KeyPreview设置为True

考虑我的第一点,你可以这样做:

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

答案 1 :(得分:0)

感谢@Alex M.让我更加亲近!我发现在这种情况下不会调用KeyPress或KeyDown。 KeyPreview属性对该行为没有影响。 KeyXp是 被调用的内容。所以这很有效:

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