Partage
  • Partager sur Facebook
  • Partager sur Twitter

comparer le texte d'une combobox avec avec items

    22 juin 2017 à 19:15:49

    Bonsoir,
    Je travail en vb net  - pouvez-vous me dire comment fait-on pour comparer le texte que contient une combobox avec ses items ?
    En effet, j'aimerais savoir si le texte qui est rentré dans ma combobox se trouve dans ses items. (oui je sais, j'ai reformulé ma question) :)
    Bien à vous.
    Guillaume

    -
    Edité par Guillaumedu15 22 juin 2017 à 19:16:39

    • Partager sur Facebook
    • Partager sur Twitter
      22 juin 2017 à 20:00:50

      Guillaumedu15 a écrit:

      En effet, j'aimerais savoir si le texte qui est rentré dans ma combobox se trouve dans ses items. (oui je sais, j'ai reformulé ma question) :)

      Edité par Guillaumedu15 il y a 42 minutes


      Tu peux trouver la réponse tout seul en créant un combobox avec une liste vide et en tapant du texte?
      • Partager sur Facebook
      • Partager sur Twitter
      ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
        23 juin 2017 à 9:06:52

        breizhbugs a écrit:

        Guillaumedu15 a écrit:

        En effet, j'aimerais savoir si le texte qui est rentré dans ma combobox se trouve dans ses items. (oui je sais, j'ai reformulé ma question) :)

        Edité par Guillaumedu15 il y a 42 minutes


        Tu peux trouver la réponse tout seul en créant un combobox avec une liste vide et en tapant du texte?

        C'est ça que je fais avant de spammer openclassroom :)

        Je place des breakpoints, etc..., j'essaye divers truc, et si ça fonctionne pas, et ben je viens vers vous. ;)

        Quand j'écris ce post, et ben j'ai toujours pas trouvé. :( mais je continue à chercher, et dés que je trouve la solution avant VOUS, je viens toujours la poster.

        Merci d'avance.

        • Partager sur Facebook
        • Partager sur Twitter
          23 juin 2017 à 10:13:47

          Salut,

          Est-ce que tu lis la doc? Parce ce qu'il y a des trucs vachement intéressants dedans, en voyant les méthodes auxquelles tu as accès ça va te faire penser à comment résoudre ton problème.

          Par exemple tu as ComboBox.Items.Contains, ou juste itérer à travers ta liste d'items et comparer un par un, sans d'autres solutions possibles plus ou moins efficaces.

          • Partager sur Facebook
          • Partager sur Twitter
            23 juin 2017 à 11:02:39

            Est-ce que tu lis la doc?

            Oui, je lis la doc, comme je l'ai dit plusieurs fois.

            Par exemple tu as ComboBox.Items.Contains, ou juste itérer à travers ta liste d'items et comparer un par un, sans d'autres solutions possibles plus ou moins efficaces.

            Oui ce code je l'ai trouvé, mais je n'arrive pas à chercher tout ce qu'il y a, par exemple dans la méthode contains, il est pas possible de dire all, j'aimerais que le code fasse ce genre de chose :

            ComboBox.Items.Contains(all)

            Le "all" pour récupérer toute les valeurs de la zone déroulante.

            Du coup, j'ai essayé ça mais ça ne focntionne pas :

            ComboBox3.Items.Contains(ComboBox3.FindStringExact(ComboBox3.Text))



            • Partager sur Facebook
            • Partager sur Twitter
              23 juin 2017 à 11:31:20

              Contains renvoie un booléen indiquant si l'objet passé en paramètre est contenu dans la collection Items, donc je ne comprends pas ce que tu entends par "all", normalement il faut faire :

              comboBox.Items.Contains(itemATeser)

              Si tu veux tester plusieurs items il faut utiliser Contains pour chacun d'entre eux.

              La méthode FindStringExact a l'air de faire exactement ce que tu veux (et même plus qu'un Contains vu que ça renvoie l'index), donc pourquoi utiliser Contains en plus? Ici tu testes si l'index renvoyé par FindStringExact est contenu dans tes items.

              En utilisant juste FindStringExact ça ne fonctionne pas?

              EDIT : au passage dans mon message précédent je voulais dire "sans DOUTE d'autres solutions possibles..."

              -
              Edité par Steve D. 23 juin 2017 à 11:33:05

              • Partager sur Facebook
              • Partager sur Twitter
                23 juin 2017 à 11:39:18

                En utilisant juste FindStringExact ça ne fonctionne pas?

                Si ça fonctionne, j'ai testé avec un bouton.


                Mais, enfaite il faudrait que cela se déclenche lorsque je tape entrer sur la combobox, donc j'ai testé mais ça ne fonctionne pas :

                Private Sub ComboBox3_KeyDown(sender As Object, e As KeyEventArgs) Handles ComboBox3.KeyDown
                
                        If e.KeyCode = Keys.Enter And ComboBox3.FindStringExact(ComboBox3.Text) And ComboBox3.Text <> "" Then
                            e.Handled = False
                            MsgBox("ok")
                
                        End If
                end sub

                Alors que si je teste avec un bouton comme ceci, ça fonctionne :

                 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
                
                
                        If ComboBox3.FindStringExact(ComboBox3.Text) Then
                            MsgBox("ok")
                        End If
                End sub





                • Partager sur Facebook
                • Partager sur Twitter
                  23 juin 2017 à 11:48:09

                  La condition n'est pas la même, quel morceau de la condition renvoie false?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 juin 2017 à 11:51:10

                    La condition n'est pas la même, quel morceau de la condition renvoie false?

                    A quel endroit ?

                    Pour "e.handled = false", vous voulez dire ?

                    [EDIT]

                    De plus, lorsque j'écris du texte et que je tape entree, la combobox3 se vide.

                    -
                    Edité par Guillaumedu15 23 juin 2017 à 12:55:15

                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 juin 2017 à 13:44:13

                      If e.KeyCode = Keys.Enter And ComboBox3.FindStringExact(ComboBox3.Text) And ComboBox3.Text <> "" Then
                      If ComboBox3.FindStringExact(ComboBox3.Text) Then


                      Est-ce qu'il y aurait pas une des conditions en plus qui sont à false?

                      Aussi FindStringExact renvoie un Integer, donc c'est pas très explicite de le mettre seul comme ça, il serait mieux de mettre la condition explicite (différent de 0 peut être, il faut regarder la doc). Mais c'est peut être juste une question de préférence personnelle.

                      Pour la comboBox qui se vide (on parle de seulement son texte et pas les autres items?) est-ce que c'est seulement quand tu t'abonnes à KeyDown ou c'est totalement indépendant?

                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 juin 2017 à 14:24:40

                        Steve D. a écrit:

                        If e.KeyCode = Keys.Enter And ComboBox3.FindStringExact(ComboBox3.Text) And ComboBox3.Text <> "" Then
                        If ComboBox3.FindStringExact(ComboBox3.Text) Then


                        Est-ce qu'il y aurait pas une des conditions en plus qui sont à false?

                        Aussi FindStringExact renvoie un Integer, donc c'est pas très explicite de le mettre seul comme ça, il serait mieux de mettre la condition explicite (différent de 0 peut être, il faut regarder la doc). Mais c'est peut être juste une question de préférence personnelle.

                        Pour la comboBox qui se vide (on parle de seulement son texte et pas les autres items?) est-ce que c'est seulement quand tu t'abonnes à KeyDown ou c'est totalement indépendant?

                        Non, toutes les conditions sont vraies, car la combobox c'est moi qui la rempli, donc elle est différente de "vide", je recherche avec la méthode "FindStringExact" dans tous mes items si le text de la combobox3 y est bien, et j'appui sur la touche "entrée" lorsque je suis sur ma combobox3, donc non tout est à "True".

                        [EDIT]

                        La combobox se vide lorsque je tape entrée, et oui je parle du texte et non pas des items.

                        J'ai essayé la même chose avec "KeyUp", "KeyPress", "KeyDown", mais elle se vide quand même.

                        -
                        Edité par Guillaumedu15 23 juin 2017 à 14:34:04

                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 juin 2017 à 14:57:16

                          Je veux pas remettre ce que tu dis en question mais est-ce que tu l'as vérifié avec le débogueur?

                          Mais est-ce qu'elle se vide si tu ne t'abonnes pas aux events?

                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 juin 2017 à 15:10:54

                            Je veux pas remettre ce que tu dis en question mais est-ce que tu l'as vérifié avec le débogueur?

                            Oui 1 millions de fois, et là je continue pour voir si j'ai rien loupé, mais en faite ça n'as pas l'air.

                            Mais est-ce qu'elle se vide si tu ne t'abonnes pas aux events?

                            Oui, je ne comprends pas.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 juin 2017 à 15:23:38

                              Une fois suffit, tu mets un point d'arrêt sur la ligne du If, un espion sur chaque morceau de la condition et c'est bon.

                              Tu peux donner un code minimal qui reproduit l'erreur? Je n'ai pas ce problème sur le test que j'ai fait.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 juin 2017 à 15:29:28

                                Fais voir ton code ?

                                [EDIT]

                                Je ne peux pas mettre d'espion sur " FindStringExact", regarde le sreen il le voit même pas sachant que je l'ai dans le code, ça aussi je comprends pas.o_O Non en faite j'ai compris, c'est à cause de son niveau de protection....

                                [RE-EDIT]

                                Tu peux donner un code minimal qui reproduit l'erreur?

                                code :

                                        If e.KeyCode = Keys.Enter And ComboBox3.FindStringExact(ComboBox3.Text) And ComboBox3.Text <> "" Then
                                            e.Handled = False
                                            MsgBox("ok")
                                
                                        End If




                                -
                                Edité par Guillaumedu15 23 juin 2017 à 16:00:46

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 juin 2017 à 16:02:42

                                  • Fais voir ton code ?

                                  J'ai pas vraiment de code, j'ai fait un nouveau projet WinForm, ajouté une ComboBox avec le designer, ajouté une ligne de code pour ajouter quelques items dedans et c'est tout. En tapant du texte dans la ComboBox puis en appuyant sur Entrée le texte n'est pas effacé.

                                  Pour ça que je te demande un code minimal qui reproduit l'erreur, le mien est trop minimal.

                                  • Je ne peux pas mettre d'espion sur " FindStringExact"
                                  SélectionneComboBox3.FindStringExact(ComboBox3.Text), clic droit -> ajouter un espion.

                                  Mmmh, pourquoi ce screenshot?

                                  EDIT : Même si ça a pas l'air de venir de l'abonnement à un event, j'ai testé de rajouter la gestion de l'event KeyDown avec ton code, à la seule différence que j'ai rajouté <> 0 pour la condition du FindStringExact.

                                  Ca marche, le texte n'est pas effacé.

                                  Par contre j'ai un comportement que je ne comprends pas, j'obtiens ces valeurs dans l'espion de e.KeyCode :

                                          LButton | MButton | Back 
                                  (En appuyant sur Enter évidemment)

                                  Alors que je teste pour la valeur Keys.Enter, et ça marche correctement, les valeurs données par l'espion ne correspondent pas aux noms dans l'énumération?

                                  -
                                  Edité par Steve D. 23 juin 2017 à 16:25:32

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 juin 2017 à 16:15:58

                                    Il y est mon code. Je te le remet :

                                    If e.KeyCode = Keys.Enter And ComboBox3.FindStringExact(ComboBox3.Text) And ComboBox3.Text <> "" Then
                                        e.Handled = False
                                        MsgBox("ok")
                                     
                                    End If

                                    > Mmmh, pourquoi ce screenshot?

                                    Bah pour te montrer que je pouvais pas mettre d'espion mais enfaite j'ai trouvé tout seul. :D

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      23 juin 2017 à 16:27:16

                                      Vois mon EDIT du message précédent.

                                      Oh ok, je passe jamais par cette fenêtre, je fais toujours clic droit-> ajouter un espion.

                                      EDIT (encore ><) :

                                      Ce que t'as donné c'est pas un code minimal qui reproduit l'erreur.

                                      Normalement je suis fainéant et tu dois me donner un code que je peux copier/coller dans un projet neuf, compiler, faire les actions qui provoquent l'erreur, comme ça j'ai un minimum d'efforts à faire pour t'aider et comprendre ce qui marche pas.

                                      (En vrai je suis pas si fainéant que ça, je trouvais juste pas d'autre moyen de t'expliquer le code minimal).

                                      -
                                      Edité par Steve D. 23 juin 2017 à 16:34:06

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        24 juin 2017 à 23:40:20

                                        Bonsoir,

                                        Désolé de te répondre que maintenant, j'ai résolu le mystère lorsque la combobox se vidait lorsque j'appuyait sur "Entrée", c'est parce qu'elle était en  mode "simple", je sais pas pourquoi mais dés que je l'ai mis en "dropdown" ça fonctionné comme chez toi. :)

                                        Donc maintenant, j'y suis presque, ça fonctionne mieux qu'avant, mais j'ai toujours un petit souci, je te fais un code minimal comme tu les aimes. ;)

                                         Public class Form1
                                        
                                        Private Sub combobox1_keyup(sender As Object, e As KeyEventArgs) Handles ComboBox3.KeyUp
                                                'on filtre les touches tapées
                                                If e.KeyCode = Keys.Enter Then
                                                    ' verifie si la combo n'est pas vide et si il n'y a pas le texte de la combo dans ses items
                                                    If ComboBox1.Text <> "" And ComboBox1.Items.Contains(ComboBox1.SelectedItem) Then
                                                        e.Handled = False
                                                        MsgBox("ok")
                                                    End If
                                                End If
                                            End Sub
                                        End class

                                        Ce snippet fonctionne très bien :

                                         ComboBox1.Items.Contains(ComboBox1.SelectedItem)

                                         mais le petit souci, est que, dès que je rentre une valeur dans la combobox, et que je tape "entrée", il m'affiche un msg d'erreur en me disant que "SelectedItem"ne peut-être null et moi j'ai besoin que ça soit null, car dés lors que le user va rentrer un nombre, je veux qu'il se rajoute dans les items s'il n'y est pas déjà.

                                        Je n'arrive pas à résoudre ce problème.

                                        Merci.

                                        Guillaume

                                        -
                                        Edité par Guillaumedu15 24 juin 2017 à 23:52:09

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          26 juin 2017 à 9:32:26

                                          Je pense que ça plante parce que justement, si tu es dans la zone de texte de la ComboBox, t'as sélectionné aucun item. Donc remplace SelectedItem par Text (fonctionne chez moi)

                                          Pour l'histoire de l'appui sur Entrée, effectivement chez moi aussi avec la ComboBox en Simple ça la vide.

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          comparer le texte d'une combobox avec avec items

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                          • Editeur
                                          • Markdown