Const CB_FINDSTRING As Long = &H14C
Const CB_FINDSTRINGEXACT As Long = &H158 Const LB_FINDSTRING As Long = &H18F Const LB_FINDSTRINGEXACT As Long = &H1A2 Declare Function SendMessageAsStr Lib "user32" _ Alias "SendMessageA" (ByVal hwnd As Long, _ ByVal wMsg As Long, ByVal wParam As Long, _ ByVal sParam As String) As Long 'Cerca una stringa in un controllo ListBox o ComboBox 'restituendo l'indice in cui si trova 'o -1 se non trovata. Se bExact = vero allora 'viene effettuata una ricerca ESATTA Public Function FindInList(ctl As Object, sDato As String, _ Optional ByVal bExact As Boolean) As Integer 'Fallisce di default FindInList = -1 'Confronta le stringhe ignorando la 'differenza tra maiuscole e minuscole If TypeOf ctl Is ComboBox Then If bExact Then FindInList = SendMessageAsStr( _ ctl.hwnd, CB_FINDSTRINGEXACT, -1, sDato) Else FindInList = SendMessageAsStr( _ ctl.hwnd, CB_FINDSTRING, -1, sDato) End If ElseIf TypeOf ctl Is ListBox Then If bExact Then FindInList = SendMessageAsStr( _ ctl.hwnd, LB_FINDSTRINGEXACT, -1, sDato) Else FindInList = SendMessageAsStr( _ ctl.hwnd, LB_FINDSTRING, -1, sDato) End If End If End Function In VB non esiste un modo per ricercare direttamente un Item di cui conosciamo il contenuto all'interno di un ComboBox o ListBox: usando le API di Windows e' invece possibile. Ecco una funzione che sfrutta i messaggi specifici per questi controlli |