Comment rechercher rapidement un élément dans une ListBox ou un ComboBox ?
Pour trouver rapidement un élément dans une ListBox ou une ComboBox, pas d'autre choix avec les méthodes classiques que de parcourir un par un tous les éléments du contrôle. Ceci peut pourtant être bien utile, pour positionner automatiquement l'index de la ListBox ou de la ComboBox à une position voulue, en fonction par exemple des premières lettres du mot. Il y a en revanche une solution très simple et très efficace pour réaliser cette recherche rapide, en utilisant la fonction SendMessage pour envoyer au contrôle le message approprié. L'exemple suivant montre comment réaliser une telle fonction de recherche avec une ListBox. Il est très facile de faire de même avec une ComboBox, le fonctionnement étant 100% identique. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _ ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long
Private Const LB_FINDSTRINGEXACT As Long = &H1A2 Private Const LB_FINDSTRING As Long = &H18F Private Const LB_ERR As Long = -1
Private Function SearchListBox(lstBox As ListBox, ByVal searchPattern As String, _ Optional ByVal startIndex As Long = -1, _ Optional ByVal exactMatch As Boolean = False) As Long Dim searchType As Long If exactMatch Then searchType = LB_FINDSTRINGEXACT Else searchType = LB_FINDSTRING End If SearchListBox = SendMessage(lstBox.hwnd, searchType, startIndex, ByVal searchPattern) End Function
result = SearchListBox(List1, "MART") result = SearchListBox(List1, "MARTINE", , True) result = SearchListBox(List1, "PIER", 10)
Pour faire de même avec une ComboBox, il suffit d'utiliser les messages CB_FINDSTRING et CB_FINDSTRINGEXACT. Pour aller plus loin Voir aussi : |
Date de publication : 25 février 2007
Dernière modification : 06 mars 2008
Rubriques : API, Contrôles
Mots-clés : ListBox, List Box, ComboBox, Combo Box, rechercher, recherche, rapide, messages, LB_FINDSTRING, LB_FINDSTRINGEXACT, optimisation, SendMessage, API |