当您单击一个字母时,使用列表框会转到该字母的第一个匹配项。当您再次单击该字母时,它会转到该字母的第二个匹配项,依此类推。
有没有办法让组合框以这种方式运行?
答案 0 :(得分:0)
我能想到的最接近的组合框是 Autocomplete 属性。
答案 1 :(得分:0)
实际上,当您点击一个字母时,使用 组合框 会将您带到该字母的第一个匹配项,或者从下拉菜单中选择...并使用 列表框 您必须从下拉菜单中进行选择。我想你在问题中反过来了。您可能只需要将字段设置为组合框而不是列表框。
答案 2 :(得分:0)
除非您想对其进行编码,否则无法使组合框以这种方式运行。但是,编码并不是那么糟糕。可能会改进以下代码(并且至少应该添加一些错误处理),但它将完成工作。
假设您有一个包含名为ComboBox1的组合框的表单,并且OnKeyDown
,OnKeyPress
和OnKeyUp
属性都设置为[Event Procedure]
:
Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
Dim Cbo As ComboBox, i As Integer, Val As Variant, CurIndex As Integer
Set Cbo = Me.ActiveControl
Select Case KeyCode
Case vbKeyBack, vbKeyDelete
Cbo.Value = Null
Case Else
CurIndex = Cbo.ListIndex
For i = CurIndex + 1 To Cbo.ListCount - 1
If Left(Cbo.ItemData(i), 1) = Chr(KeyCode) Then
Cbo.Value = Cbo.ItemData(i)
Exit Sub
End If
Next i
For i = 0 To CurIndex
If Left(Cbo.ItemData(i), 1) = Chr(KeyCode) Then
Cbo = Cbo.ItemData(i)
Exit Sub
End If
Next i
End Select
KeyCode = StripKeyCode(KeyCode)
End Sub
Private Sub Combo1_KeyPress(KeyAscii As Integer)
KeyAscii = StripKeyCode(KeyAscii)
End Sub
Private Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer)
KeyCode = StripKeyCode(KeyCode)
End Sub
Private Function StripKeyCode(KeyCode As Integer) As Integer
Select Case KeyCode
Case vbKeyUp, vbKeyDown, vbKeyLeft, vbKeyRight, vbKeyTab, vbKeyF4
'Allow navigation keys to pass through
StripKeyCode = KeyCode
Case Else
StripKeyCode = 0
End Select
End Function
我怀疑在具有大量选择的组合框中性能会如此之高。再说一遍,你可能只应该在以相同字母开头的项目数量很少(例如,小于5)的情况下使用这种技术。