Filtrare elenco nomi su list box

di il
7 risposte

Filtrare elenco nomi su list box

Salve a tutti,

tempo fa ho fatto un progetto in vb in cui c'è una list box con un elenco di nomi. 

Per "filtrare" la lista di nomi in base ad un criterio al tempo ho fatto così

     For Each file In file_presenti
         If Filtro = "" Then
             frmPrincipale.lstPrincipale.Items.Add(file.Name)
             frmPrincipale.lstPrincipale.Refresh()
         Else
             If LCase(file.Name).Contains(LCase(Filtro)) = True Then
                 frmPrincipale.lstPrincipale.Items.Add(file.Name)
                 frmPrincipale.lstPrincipale.Refresh()
             End If

         End If
     Next

Adesso, ho bisogno di un filtro vero e proprio quindi ho la necessita di poter utilizzare i caratteri jolly come per esempio *

Quindi st* mi fa vedere tutti i nomi della lista che iniziano con st.

Il problema è che non so nemmeno cosa cercare nel manuale.

Mi date un dritta ? 

Grazie.

7 Risposte

  • Re: Filtrare elenco nomi su list box

    Per avere l'insieme già filtrato da visualizzare usa la GetFiles

    Leggi e applica questo

    https://learn.microsoft.com/it-it/dotnet/api/system.io.directory.getfiles?view=net-8.0#system-io-directory-getfiles(system-string-system-string)

  • Re: Filtrare elenco nomi su list box

    Io userei l'operatore LIKE

    non so se VB.NET lo supporta ancora però in classic asp vbs (il predecessore di vb.net) l'ho visto utilizzare

  • Re: Filtrare elenco nomi su list box

    Grazie per il momento,

    gentilissimi !!! 

    Provo e poi vi aggiorno !

  • Re: Filtrare elenco nomi su list box

    Figurati

    ho visto adesso il link che ti ha girato Oregon

    segui il link che ti ha condiviso Oregon è nettamente migliore del vecchissimo operatore like

    --

    --

    --

    ti riporto per completezza come sarebbe la funzionalità con l'operatore like

    (non avendo visual studio ho usato un compilatore online)

  • Re: Filtrare elenco nomi su list box

    Ciao, ma possiamo semplificare e controllare meglio ciò che viene impostato come filtro 

    Esempio impostando il filtro  = st*  (tutti quelli che iniziano con st) :

    ' Retrieve fileinfo
    Dim file_presenti As FileInfo() = (New DirectoryInfo("C:\YourFolder\")).GetFiles()
    
    ' List clear
    frmPrincipale.lstPrincipale.Items.Clear()
    
    ' Set filter
    Dim filtro As String = "st*"
    
    ' Check and filter normalize
    Dim regexPattern As String = "^" & Regex.Escape(filtro).Replace("\*", ".*").Replace("\?", ".") & "$"
    
    ' Load files and apply filter
    For Each file In file_presenti
        If Regex.IsMatch(file.Name, regexPattern, RegexOptions.IgnoreCase) Then
            frmPrincipale.lstPrincipale.Items.Add(file.Name)
        End If
    Next

    Se ti occorre, questo metodo ti consente anche di utilizzare/abbinare il carattere jolly "?" per realizzare i tuoi filtri.

    Infine, se e quando necessario, farai il tuo refresh  frmPrincipale.lstPrincipale.Refresh()  -  (non ripeterlo tutte le volte ad ogni Items.Add)

  • Re: Filtrare elenco nomi su list box

    22/04/2025 - psx2 ha scritto:

    Adesso, ho bisogno di un filtro vero e proprio quindi ho la necessita di poter utilizzare i caratteri jolly come per esempio *

    ?? Ma in file_presenti cosa hai ??

    Semplificando ancora e supponendo  tu voglia leggere e filtrare i file presenti in una certa cartella e per quanto già indicato da oregon, allora:

    ' Retrieve files in the directory
    Dim file_presenti As FileInfo() = (New DirectoryInfo("C:\YourFolder\")).GetFiles("st*")
    
    ' Listbox clear
    Me.lstPrincipale.Items.Clear()
    
    ' Load files in the listbox
    For Each file In file_presenti
    	frmPrincipale.lstPrincipale.Items.Add(file.Name)
    Next

    Quindi il filtro lo mettiamo nella GetFiles("st*")

    Semplice semplice, veloce veloce  ;-)

    Quindi la domanda è ... perchè complicare cose che sono semplici ?

  • Re: Filtrare elenco nomi su list box

    23/04/2025 - By65Franco ha scritto:

    Quindi il filtro lo mettiamo nella GetFiles

    Che è quello che gli ho suggerito di fare in autonomia un po' di post fa...

Devi accedere o registrarti per scrivere nel forum
7 risposte