01/10/2023 - VinSer ha scritto:
per una funzione che ho usato precedentemente in altri file e non mi ha causato problemi, misteriosamente su questo file non so perchè non riesco a farla funzionare
Allora, … per una listbox il tuo sistema non potrebbe mai e poi mai funzionare… se mi fai un favore, mi fai vedere come funziona su altri tuoi database? (ma giusto per curiosità)
Detto ciò, su una ListBox potresti fare una cosa di questo tipo , ma dipende ovviamente da quanti elementi hai nella ListBox
Per esempio … poniamo di avere una TextBox di nome TxtSearch e una ListBox di nome YourListbox e per la TextBox usiamo l'evento Change:
' LISTBOX DYNAMIC SEARCH ITEM
Private Sub TxtSearch_Change()
' selected clear
Dim i As Integer
For i = 0 To Me.YourListbox.ListCount - 1
Me.YourListbox.Selected(i) = False
Next i
' search item
For i = 0 To Me.YourListbox.ListCount - 1
If InStr(1, Me.YourListbox.ItemData(i), Me.TxtSearch.Text, vbTextCompare) > 0 Then
' item selected
Me.YourListbox.Selected(i) = True
Exit For
End If
Next i
End Sub
- se la ListBox ha più colonne allora sostituire la condizione If con l'istruzione Instr in questo modo:
If InStr(1, Me.YourListBox.Column(1, i), Me.TxtSearch.Text, vbTextCompare) > 0 Then
In questo esempio si ricerca la corrispondenza nella seconda colonna della listbox mentre si scorrono gli items.
Se invece si vuole ricercare sulla base dei caratteri iniziali ( e quindi non in Parte) a partire da Sinistra, allora si userà:
If Left(Me.YourListBox.Column(1, i), Len(Me.TxtSearch.Text)) = Me.TxtSearch.Text Then
Pertanto come prima cosa si provvede a deselezionare gli Items
e come seconda cosa si ricerca, mano a mano che si digita nella texbox, se i caratteri e la parola che si sta componendo, coincide con uno degli Items della listbox
Il risultato sarà quello di vedere selezionata, mano a mano che si digita, prima una e poi via via le altre riga che corrispondono a tutti o in parte ai caratteri inseriti nella textbox.
Mentre, come accennavo in precedenza, si può intervenire nel filtrare l'origine record della ListBox modificando con una where condition il contenuto della ListBox, sempre sulla base di quanto si sta digitando nella TextBox
P.S.
Sarebbe necessario fare attenzione quando si apre un Thread passando le informazioni corrette e complete in modo da poter ricevere delle risposte adeguate e altrettanto corrette. (tutto il resto è solo perdita di tempo inutile)