如何让Microsoft Access组合框像列表框一样运行

时间:2011-12-24 00:01:37

标签: ms-access ms-access-2007

当您单击一个字母时,使用列表框会转到该字母的第一个匹配项。当您再次单击该字母时,它会转到该字母的第二个匹配项,依此类推。

有没有办法让组合框以这种方式运行?

3 个答案:

答案 0 :(得分:0)

我能想到的最接近的组合框是 Autocomplete 属性。

答案 1 :(得分:0)

实际上,当您点击一个字母时,使用 组合框 会将您带到该字母的第一个匹配项,或者从下拉菜单中选择...并使用 列表框 您必须从下拉菜单中进行选择。我想你在问题中反过来了。您可能只需要将字段设置为组合框而不是列表框。

答案 2 :(得分:0)

除非您想对其进行编码,否则无法使组合框以这种方式运行。但是,编码并不是那么糟糕。可能会改进以下代码(并且至少应该添加一些错误处理),但它将完成工作。

假设您有一个包含名为ComboBox1的组合框的表单,并且OnKeyDownOnKeyPressOnKeyUp属性都设置为[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)的情况下使用这种技术。