Verifier une valeur dans listview en vb.net

Résolu
Utilisateur anonyme -  
Kalissi Messages postés 221 Statut Membre -
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. Utilisateur anonyme
     
    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.
    0
  2. Kalissi Messages postés 221 Statut Membre 20
     
    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
    0
  3. Utilisateur anonyme
     
    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
    --
    0
  4. Kalissi Messages postés 221 Statut Membre 20
     
    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
    0
    1. Utilisateur anonyme
       
      Salut, c'est à la fois plus long à coder et beaucoup plus long à l'exécution que ce que j'ai proposé au début
      0
      1. Kalissi Messages postés 221 Statut Membre 20 > Utilisateur anonyme
         
        Bonjour,

        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
        0
    2. Utilisateur anonyme
       
          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
      0
    3. Utilisateur anonyme
       
      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
      0
    4. Kalissi Messages postés 221 Statut Membre 20
       
      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
      0