2017-03-09 184 views
1

我有一个组合框,我想接受从编辑区域进入选择。我不知道这是否是最好的方法,但基于其他问题,我在这里添加了一个ComboBox_KeyPress例程来将'Enter'映射到'Tab'。VB组合框不接受'输入'

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.KeyCodeKeys本身。

此外,请考虑在您的表单属性中将您的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 
0

感谢@Alex M.:

我的第一点思考,你可以做到这一点!我发现在这种情况下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