Verifier une valeur dans listview en vb.net [Résolu/Fermé]

Signaler
Messages postés
173
Date d'inscription
dimanche 20 juillet 2003
Statut
Membre
Dernière intervention
24 août 2020
-
Messages postés
218
Date d'inscription
jeudi 2 mai 2013
Statut
Membre
Dernière intervention
15 juillet 2019
-
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

Messages postés
14953
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
30 octobre 2020
602
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.
Messages postés
218
Date d'inscription
jeudi 2 mai 2013
Statut
Membre
Dernière intervention
15 juillet 2019
19
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
Messages postés
173
Date d'inscription
dimanche 20 juillet 2003
Statut
Membre
Dernière intervention
24 août 2020
3
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
--
Messages postés
218
Date d'inscription
jeudi 2 mai 2013
Statut
Membre
Dernière intervention
15 juillet 2019
19
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
Messages postés
14953
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
30 octobre 2020
602
Salut, c'est à la fois plus long à coder et beaucoup plus long à l'exécution que ce que j'ai proposé au début
Messages postés
218
Date d'inscription
jeudi 2 mai 2013
Statut
Membre
Dernière intervention
15 juillet 2019
19 >
Messages postés
14953
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
30 octobre 2020

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
Messages postés
14953
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
30 octobre 2020
602
    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
Messages postés
14953
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
30 octobre 2020
602
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
Messages postés
218
Date d'inscription
jeudi 2 mai 2013
Statut
Membre
Dernière intervention
15 juillet 2019
19
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