Как я могу заставить комбинированный список Microsoft Access вести себя как список - PullRequest
0 голосов
/ 24 декабря 2011

С помощью списка, когда вы щелкаете букву, вы переходите к первому совпадению для этой буквы.Когда вы нажимаете эту букву снова, вы переходите ко второму совпадению для этой буквы и т. Д.

Есть ли способ заставить поле со списком вести себя таким образом?

Ответы [ 3 ]

0 голосов
/ 25 декабря 2011

На самом деле, с помощью поля со списком , когда вы нажимаете на букву, вы переходите к первому совпадению для этой буквы ИЛИ выбираете из выпадающего списка ... и с список вы должны выбрать из выпадающего списка. Я думаю, что у вас есть другой вопрос в вашем вопросе. Возможно, вам просто нужно, чтобы ваши поля были списками, а не списками.

0 голосов
/ 28 декабря 2011

Нет способа заставить поле со списком вести себя таким образом, если вы не хотите его кодировать. Тем не менее, кодирование это не так уж плохо. Следующий код, возможно, можно улучшить (и, по крайней мере, добавить обработку ошибок), но он выполнит свою работу.

Предположим, у вас есть форма с полем со списком 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).

0 голосов
/ 24 декабря 2011

Самое близкое, что я могу придумать для комбинированного списка, это свойство Автозаполнение .

...