IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Simplifier mon code de recherche avec listview1


Sujet :

VB.NET

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 267
    Points : 0
    Points
    0
    Par défaut Simplifier mon code de recherche avec listview1
    bonjour, j'ai trouver la solution a mon probléme. je voudrais savoir, il D’il possible de simplifier mon code de recherche?
    voici mon projet :
    Nom : teste 3.jpg
Affichages : 138
Taille : 28,5 Ko

    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Private flagmark As Integer
        Private flagfound As Boolean = False
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            ListView1.Items.Add("A56601CB30510000")
            ListView1.Items.Add("A56602CB30510000")
            ListView1.Items.Add("A56603CB30510000")
            ListView1.Items.Add("A56604CB30510000")
            ListView1.Items.Add("BF2EA6A46A160000")
            ListView1.Items.Add("A78D4166193C0000")
            ListView1.Items.Add("59504DAA96298000")
            ListView1.Items.Add("D424EC43B9C93000")
        End Sub
     
        Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
            TextBox1.Text = TextBox1.Text.Replace(" ", "")
            Dim count As Integer = 0
            Dim mark As Integer
            Dim str As String
            For index As Integer = ListView1.Items.Count - 1 To 0 Step -1
                If TextBox1.Text = "" Then
                    ListView1.Items(index).ForeColor = Color.Black
                Else
                    If Microsoft.VisualBasic.Left(ListView1.Items(index).SubItems(0).Text, TextBox1.Text.Length) = TextBox1.Text Then
                        ListView1.Items(index).ForeColor = Color.Red
                        mark = index
                        count += 1
                    Else
                        ListView1.Items(index).ForeColor = Color.Transparent
                    End If
                End If
            Next
            If count = 1 Then
                If Not flagfound Then
                    flagmark = mark
                End If
                flagfound = True
                str = ListView1.Items(mark).Text
                ListView1.Items.RemoveAt(mark)
                ListView1.Items.Insert(0, str)
                ListView1.Items(0).ForeColor = Color.Red
            End If
            If DirectCast(sender, TextBox).Text = String.Empty AndAlso flagfound Then
                str = ListView1.Items(0).Text
                ListView1.Items(0).Text = ListView1.Items(1).Text
                ListView1.Items.Insert(flagmark, str)
                flagfound = False
            End If
        End Sub
    avez-vous une autre solution pour simplifier mon mode de recherche? Merci

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    oui largement
    si j'ai bien compris tu écrit en rouge les élément qui commence comme ce qui est dans le texbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
            Try
                Me.ListView1.BeginUpdate()
                ' remettre tout en noir (car ce qui était rouge avant ne l'est peut etre plus)
                For Each item As ListViewItem In Me.ListView1.Items
                    item.ForeColor = Color.Black
                Next
     
                If Me.TextBox1.Text.Trim = "" Then Exit Sub ' aucun recherche à faire on sort
     
                For Each item As ListViewItem In Me.ListView1.Items
                    If item.SubItems(0).Text.ToLower Like Me.TextBox1.Text.ToLower & "*" Then
                        item.ForeColor = Color.Red
                    Else
                        item.ForeColor = Color.Transparent
                    End If
     
                Next
     
            Catch ex As Exception
                'catch factultatif c'est surtout le finally qui est utile, logger l'erreur éventuellement
            Finally
                Me.ListView1.EndUpdate()
            End Try
    End Sub

    beginupdate et endupdate sont là pour éviter que tout soit redessiner x fois pendant qu'on modifie, c'est pour les performances
    finally permet d'être sur que l'instruction sera exécutée
    .tolower c'est pour éviter d'être obliger de taper A, ca ne controle pas la casse
    like vérifie si la chaine ressemble à ce qu'on cherche, * remplacant entre 0 et n caractères au choix, donc like "a*" c'est tout ce qui commence par A like "*a*" c'est tout ce qui contient un a ...

    après mettre en transparent c'est étrange normalement on ferait plus ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
      Private _Elements As New List(Of String)
     
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            _Elements.Add("A56601CB30510000")
            _Elements.Add("A56602CB30510000")
            _Elements.Add("A56603CB30510000")
            _Elements.Add("A56604CB30510000")
            _Elements.Add("BF2EA6A46A160000")
            _Elements.Add("A78D4166193C0000")
            _Elements.Add("59504DAA96298000")
            _Elements.Add("D424EC43B9C93000")
            Me.ListView1.Items.AddRange((From element In _Elements Select New ListViewItem(element)).ToArray)
        End Sub
     
        Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
            Try
                Me.ListView1.BeginUpdate()
                Me.ListView1.Items.Clear()
                Me.ListView1.Items.AddRange((From element In _Elements Where element.ToLower Like Me.TextBox1.Text.ToLower & "*" Select New ListViewItem(element)).ToArray)
     
            Catch ex As Exception
                'catch factultatif c'est surtout le finally qui est utile, logger l'erreur éventuellement
            Finally
                Me.ListView1.EndUpdate()
            End Try
        End Sub
    c'est à dire n'afficher que ce qui est nécessaire
    plusieurs avantages :
    - plus pratique pour l'utilisateur (si beaucoup d'éléments avec plein de transparent au milieu c'est aberrant)
    - moins de code
    - une collection déportée dans une variable non graphique, en règle générale il vaut mieux éviter de balayer les données d'un controle
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    @pol63 : je suis désolé de te dire ca mais il s' en fiche de tes explications ...ce qu il veut c'est simplement du code prêt à l emploi comme d'habitude...il suffit de lire la majeure partie de ses topics é___è.....

    A+

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    arf d'habitude je regarde qui post pourtant, et en effet je crois qu'il fait partie de ma "liste" de non réponse ou de réponse simple ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    @Pol63
    Merci quand même pour le code et l'explication détaillée. Il faut voir le coté positif, cela pourra servir à d'autres membres du forum
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  6. #6
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par rv26t Voir le message
    Bonjour,

    @Pol63
    Merci quand même pour le code et l'explication détaillée. Il faut voir le coté positif, cela pourra servir à d'autres membres du forum
    Effectivement tu as raison.

  7. #7
    Invité
    Invité(e)
    Par défaut
    http://www.developpez.net/forums/d14...che-listview1/
    tu exposes de nouveau ton problème?

  8. #8
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Bonjour

    Si tu as le temps de jetter un coup d'oeil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Public Class Form1
       Private flagmark As Integer
        Private flagfound As Boolean = False
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            ListView1.Items.Add("A56601CB30510000")
            ListView1.Items.Add("A56602CB30510000")
            ListView1.Items.Add("A56603CB30510000")
            ListView1.Items.Add("A56604CB30510000")
            ListView1.Items.Add("BF2EA6A46A160000")
            ListView1.Items.Add("A78D4166193C0000")
            ListView1.Items.Add("59504DAA96298000")
            ListView1.Items.Add("D424EC43B9C93000")
     
        End Sub
     
        Private Sub TextBox1_TextChanged(sender As Object, e As System.EventArgs) Handles TextBox1.TextChanged
            TextBox1.Text = TextBox1.Text.Replace(" ", "")
            Dim count As Integer = 0
            Dim mark As Integer
            Dim str As String
     
            For index As Integer = ListView1.Items.Count - 1 To 0 Step -1
                If TextBox1.Text = "" Then
                    ListView1.Items(index).ForeColor = Color.Black
                Else
                    If Microsoft.VisualBasic.Left(ListView1.Items(index).SubItems(0).Text, TextBox1.Text.Length) = TextBox1.Text Then
                        ListView1.Items(index).ForeColor = Color.Red
                        mark = index
                        count += 1
                    Else
                        ListView1.Items(index).ForeColor = Color.Transparent
                    End If
                End If
            Next
            If count = 1 Then
                If Not flagfound Then
                    flagmark = mark
                End If
                flagfound = True
                str = ListView1.Items(mark).Text
                ListView1.Items.RemoveAt(mark)
                ListView1.Items.Insert(0, str)
                ListView1.Items(0).ForeColor = Color.Red
            End If
            If DirectCast(sender, TextBox).Text = String.Empty AndAlso flagfound Then
                str = ListView1.Items(0).Text
                ListView1.Items(0).Text = ListView1.Items(1).Text
                ListView1.Items.Insert(flagmark, str)
                flagfound = False
            End If
        End Sub
    End Class

Discussions similaires

  1. [XL-2007] Simplifier mon code ?
    Par hdisnice dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/06/2011, 08h44
  2. Comment pourrais-je simplifier mon code
    Par pierrot10 dans le forum jQuery
    Réponses: 1
    Dernier message: 28/08/2010, 09h30
  3. Simplifier mon code
    Par pierre987321 dans le forum Langage
    Réponses: 5
    Dernier message: 07/04/2010, 12h49
  4. Simplifier mon code "Majuscule/Minuscule"
    Par Manou34 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/01/2008, 17h05
  5. [Conception] soucis avec mon code de recherche par un ou plusieurs critères
    Par jolipepage75 dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 11/06/2006, 02h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo