Verifier une valeur dans listview en vb.net

Résolu/Fermé
Utilisateur anonyme - 13 déc. 2018 à 17:10
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 - 19 déc. 2018 à 13:48
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

Utilisateur anonyme
13 déc. 2018 à 17:15
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
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
18 déc. 2018 à 14:42
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
Utilisateur anonyme
18 déc. 2018 à 18:25
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
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
18 déc. 2018 à 19:24
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
Utilisateur anonyme
18 déc. 2018 à 19:46
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
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20 > Utilisateur anonyme
18 déc. 2018 à 21:23
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
Utilisateur anonyme
18 déc. 2018 à 20:38
    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
Utilisateur anonyme
18 déc. 2018 à 22:33
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
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
19 déc. 2018 à 13:48
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