IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Chercher des chaînes de caractère dans une List(Of String)


Sujet :

VB.NET

  1. #1
    Membre habitué Avatar de CLeBeR
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Points : 188
    Points
    188
    Par défaut Chercher des chaînes de caractère dans une List(Of String)
    Bonjour,
    j'ai une listbox de plus de 800 000 lignes à afficher, ne voulant pas mettre imposer à l'utilisateur de mon programme une telle masse de texte ( et surtout n'arrivant pas à utiliser le mode virtuel de listview pour optimiser l'affichage ), j'ai opté pour faire un système de recherche qui viendra afficher les sites disponibles dans ma List(Of String) en fonction des lettres tapées. Par exemple si ma List(Of String) contient :
    AAB
    ABB
    Si l'utilisateur cherche dans la textbox A, les deux éléments apparaissent dans la listbox, en revanche si il continu de chercher en mettant AB, seul ABB apparaitra.
    J'ai donc développé le code suivant mais rien ne s'affiche dans ma listbox :
    ListeDeSite est une List (Of String)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Private Sub TextBoxSiteInterditPersonnalisé_TextChanged(sender As Object, e As EventArgs) Handles TextBoxSiteInterditPersonnalisé.TextChanged
     
            For Each item In ListeDeSite
                If ListeDeSite.Contains(TextBoxSiteInterditPersonnalisé.Text) Then
                    ListBoxSitesInterdits.Items.Add(item)
                End If
            Next
        End Sub
    Merci de votre aide !
    Pensez à voter pour une réponse qui vous aide ou pour une personne insolente !
    Si votre sujet est résolu, cliquez sur le bouton !

  2. #2
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir Cleber,

    Tu n'as absolument pas besoin de parcourir un List(Of) pour savoir s'il contient un élément ..o_O.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       Dim ListeDeSite As New List(Of String) : ListeDeSite.Add("AA") : ListeDeSite.Add("BB") : ListeDeSite.Add("CC")
     
            If ListeDeSite.Contains("AA") Then
                MsgBox("Oui cette liste contient l'élément : AA")
            End If
    A+

  3. #3
    Membre habitué Avatar de CLeBeR
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    Salut wallace1,
    le problème avec l'adaptation que j'ai faite du code que tu m'a passé, c'est que c'est le contenu de la textbox qui va être ajouté à la listbox et non tous les éléments qui contiennent le contenu de la listbox, peut être que je me suis mal expliqué ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            If ListeDeSite.Contains(TextBoxSiteInterditPersonnalisé.Text) Then
                ListBoxSitesInterdits.Items.Add(TextBoxSiteInterditPersonnalisé.Text)
            End If
    Merci.
    Pensez à voter pour une réponse qui vous aide ou pour une personne insolente !
    Si votre sujet est résolu, cliquez sur le bouton !

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    Tu n'as absolument pas besoin de parcourir un List(Of) pour savoir s'il contient un élément ..o_O.
    il ne cherche pas à savoir si c'est contenu, mais si ca ressemble (like) il faut donc bien parcourir toute la liste avec une boucle
    d'ailleurs pour info, .contains ca fait une boucle pour savoir si l'élément est contenu, c'est juste un raccourci de code mais l'effet est le même



    il y a des moyens de coder une boucle en une seule ligne de code, c'est vs qui écrit le code de la boucle à la compilation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    textchanged :
      me.listbox.items.clear
      me.listbox.items.addrange((from element in malistof where element like "*" & me.textbox.text & "*" select element).toarray)
    end sub
    on vide donc le listbox
    puis on lui ajoute tout ce qui ressemble (like) le from sert à coder la boucle, ca ressemble donc à du sql dans un sens différent
    le .toarray c'est parce que le addrange (ajout de plusieurs choses d'un coup) n'accepte que des tableaux
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    il ne cherche pas à savoir si c'est contenu, mais si ca ressemble (like) il faut donc bien parcourir toute la liste avec une boucle
    d'ailleurs pour info, .contains ca fait une boucle pour savoir si l'élément est contenu, c'est juste un raccourci de code mais l'effet est le même
    "pour info" je suis bien au courant que .contains fait une boucle c'est pour cela que je dis qu'il n'est pas nécessaire de faire cette imbrication !

    ...breff j'ai du mal comprendre l'origine de son problème ....

  6. #6
    Membre habitué Avatar de CLeBeR
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    Salut Pol63,
    j'ai toujours le même problème, rien ne s'affiche dans ma listbox quelque soit la valeur tapée.
    Pensez à voter pour une réponse qui vous aide ou pour une personne insolente !
    Si votre sujet est résolu, cliquez sur le bouton !

  7. #7
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    Linq to Object serait peut etre ton ami...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Public Class Form1
        Private ListeDeSite As New List(Of String)
            Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            ListeDeSite.Add("AAB")
            ListeDeSite.Add("ABB")
     
        End Sub
     
        Private Sub txtBoxSearcher_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBoxSearcher.TextChanged
            AfficheSitesInterdits(ListeDeSite, txtBoxSearcher.Text.ToUpper)
     
        End Sub
        Sub AfficheSitesInterdits(ByVal maListe As List(Of String), ByVal mot As String)
     
            Dim querySites = From s As String In maListe
                                     Where s.StartsWith(mot, StringComparison.InvariantCulture)
            ListBoxSitesInterdits.Items.Clear()
     
            'iteration explicite obligatoire
            For Each item In querySites
                ListBoxSitesInterdits.Items.Add(item)
            Next
        End Sub
     
     
     
     
    End Class
    bon code...

  8. #8
    Membre habitué Avatar de CLeBeR
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    Merci à vous deux, le code de Pol63 marchait en fait, j'avais "juste oublié" en mode commenté ma fonction de remplissage de la list of
    Le code de MABROUKI marche aussi, merci encore à vous deux (j'ai pris le code de Pol63 car il est me semble-t-il beaucoup plus rapide.)
    Je l'ai adapté pour filtrer un maximum car la listbox plantait à nouveau ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            If TextBoxSiteInterditPersonnalisé.TextLength < 10 Then
                MsgBox("Veuillez ajouter encore " & 10 - TextBoxSiteInterditPersonnalisé.TextLength & " pour lancer la recherche")
            Else
                MsgBox("Veuillez patienter, la recherche est en cours, celà peut prendre plus de deux minutes", MsgBoxStyle.Information)
                ListBoxSitesInterdits.Items.Clear()
                ListBoxSitesInterdits.Items.AddRange((From element In ListeDeSite Where element Like "*" & TextBoxSiteInterditPersonnalisé.Text & "*" Select element).ToArray)
            End If
    Merci et
    Pensez à voter pour une réponse qui vous aide ou pour une personne insolente !
    Si votre sujet est résolu, cliquez sur le bouton !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 24/02/2012, 16h04
  2. Réponses: 3
    Dernier message: 13/05/2008, 13h11
  3. Chercher une chaîne de caractères dans une liste
    Par baedal dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 28/05/2007, 23h42
  4. Saisie de plusieurs caractère dans une liste déroulante
    Par Oluha dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/03/2005, 14h32
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo