Verifier une valeur dans listview en vb.net

Résolu
Bonjour,

je crée une textbox une listview avec une seule colonne et je saisis des noms avec un button1
je veux avoir un message d'erreur qui s'affiche si le nom que j'entre existe déjà dans la listview et surtout qu'il ne rentre pas ce nom dans la listview

voilà le code que j'ai fait et qui ne marche pas

 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim Element As New ListViewItem

        Element.Text = TextBox1.Text
        ListView1.Items.Add(Element)




        For Each item As ListViewItem In ListView1.Items
            If item.Name.Contains(TextBox1.Text) Then

                MessageBox.Show("attention le nom existe déjà")
                Exit Sub
            End If
        Next
        


    End Sub


j'ai aussi essayé
 for i as integer =0 to listview1.items.count-1 
if listview1.items(i).text= textbox1.text
 messagebox 

et cela ne marche pas ou alors il m'affiche le message mais met quand même le nom dans la liste

4 réponses

  1. Bonjour

    crée une List(of string), avant d'ajouter le mot, teste s'il existe dans la liste avec .Any().
    S'il existe tu sors de la sub,
    s'il n'existe pas tu l'ajoute à la liste et au listView.
    1. Bonjour,

      Exemple :

          Private Sub btnListView_Click(sender As Object, e As EventArgs) Handles btnListView.Click
      
              Dim Valeur As String = String.Empty
      
              If (Not (String.IsNullOrEmpty(Me.TextBox1.Text))) Then
                  Valeur = Me.TextBox1.Text
                  If (InsereElement(Valeur)) Then
                      MessageBox.Show("attention le nom existe déjà")
                  Else
                      ListView1.Items.Add(Valeur)
                  End If
              End If
      
          End Sub
      
          Private Function InsereElement(ByVal pValeur As String) As Boolean
      
              Dim Flag As Boolean = False
              Dim Element As ListViewItem = Nothing
      
              For Each Element In ListView1.Items
                  If (Element.Text.Contains(pValeur)) Then
                      Flag = True
                      Exit For
                  End If
              Next
      
              Return Flag
      
          End Function
      
      


      K
      1. Bonjour
        Merci de ta réponse
        Mais je ne comprends pas bien
        Dim Valeur As String = String.Empty
        Que signifie cette ligne ?
        Est ce une façon de dire valeur.text=« »
        C’est à dire qu’il n’y a pas de texte
        Je suis très débutant
        Merci d’une réponse
        --
        1. Bonjour,

          C'est mon style de programmation ...
          Lorsque je déclare une variable, j'initialise immédiatement sa valeur.

          Essai ce code ...

                  Dim Longueur As Int32 = 0
                  Dim Chaine As String = String.Empty
          
                  Longueur = Chaine.Length
          
                  Chaine = Nothing
          
                  Longueur = Chaine.Length
          
          


          Selon ma perception, il est toujours préférable de connaître l'état d'une variable.
          Si ce n'est pas le cas, il nous faut tester cette variable avant d'appliquer une action sur celle-ci ...

          ex. :

          If (Not (String.IsNullOrEmpty(Me.TextBox1.Text))) Then

          K
          1. Salut, c'est à la fois plus long à coder et beaucoup plus long à l'exécution que ce que j'ai proposé au début
          2.     Dim maListe As New List(Of String)
            
             Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            
                    If (maListe.Contains(TextBox1.Text)) Then Return 'ça existe déjà on sort
            
                    maListe.Add(TextBox1.Text)
                    ListView1.Items.Add(TextBox1.Text)
            End Sub
          3. @Utilisateur anonymeBonjour,

            Avec un Stopwatch, j'obtiens moins de 1 milliseconde dans les 2 cas...
            Mais oui, j'admets que c'est plus long à coder, mais pour l'entretien, je préfère le code explicit ...
            Question de point de vue :-)

            K
          4. j'obtiens moins de 1 milliseconde dans les 2 cas...

            Essaye avec 10 000 entrées, tu verras qu'itérer un contrôle quel qu'il soit est plus long qu'une collection.

            je préfère le code explicit ...

            si tu le dis
          5. re

            actuellement, je travaille avec des banques qui contiennent jusqu'à 1 million d'enregistrements
            et je n'ai pas encore eu de problèmes de performance. En 1984, j'ai commencé à coder en assembleur,
            MC6809 et depuis ce fut toujours le même défi, penser et coder comme pense la machine.

            Mais je suis d'accord, il eut été préférable d'utiliser un LinQ, plutôt qu'itérer sur une collection d'objet.

            K