當你點擊一個字母的列表框,它會帶你到該字母的第一個匹配。當你再次點擊該字母時,會將你帶到該字母的第二個匹配項等等。我怎樣才能得到一個Microsoft Access組合框的行爲像一個列表框
有沒有辦法讓組合框的行爲方式?
當你點擊一個字母的列表框,它會帶你到該字母的第一個匹配。當你再次點擊該字母時,會將你帶到該字母的第二個匹配項等等。我怎樣才能得到一個Microsoft Access組合框的行爲像一個列表框
有沒有辦法讓組合框的行爲方式?
我能想到的最接近的組合框是自動完成屬性。
其實,用組合框當你點擊一個字母,它把你的第一場比賽爲字母或從下拉框中選擇......並用列表框你必須從選擇拉下。我想你的問題反過來了。你可能只需要讓你的領域是組合框而不是列表框。
除非您想對組合框進行編碼,否則無法使組合框的行爲如此。但是,編碼並不是那麼糟糕。下面的代碼可能可以改進(並且至少應該添加一些錯誤處理),但它會完成工作。
假設你有OnKeyPress
名爲ComboBox1一個組合框和OnKeyDown
,窗體和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)的情況下使用這種技術。
這就是組合框在Access中的工作方式。當你鍵入字母時,這個詞是「猜到的」。這不是爲了你嗎?列表框一般不會這樣。 – Fionnuala
@Remou:實際上,我認爲塞思想要的是這樣的行爲:假設列表「愛麗絲」,「比爾」,「鮑勃」,「查爾斯」。用戶按下「B」並高亮顯示帳單。然後用戶再次按下「B」,現在突出顯示Bob。在列表框中,Bob確實會被突出顯示。在一個組合框中,BB將在組合框中,當然不會有匹配。 Seth:如果我錯了,請糾正我。 – mwolfe02
實質上,您試圖使Access組合框的行爲類似於下拉框。 Access沒有本地下拉框;很大程度上是因爲組合框在大多數情況下滿足了這種需求。有兩個看起來相同但行爲不同的控件會損害用戶界面。考慮到這一點,你可能應該對你的僞下拉控件做些什麼來區分它們和標準的組合框。也許是一個不同的特殊效果:沉沒的組合和升降/下拉等。 – mwolfe02