我有一个我想接受的组合框从编辑区输入作为选择。我不知道这是否是最佳方式,但根据此处回答的其他问题,我添加了一个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永远不会被调用。
我做错了什么?
答案 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