Listbox

AsselusBorealiss Messages postés 79 Date d'inscription dimanche 15 octobre 2000 Statut Membre Dernière intervention 24 septembre 2007 - 30 oct. 2003 à 09:13
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 9 juil. 2004 à 16:44
salut a tous
je cherche ( dans une listbox ) a affiche que les items qui commence par rr ( ex)

j'ai chercher dans les xxxxx pages des diff forums mes rien trouve

merci
assel

8 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 oct. 2003 à 09:40
Tu cherche donc a filtrer les elements.....

il n'est pas possible de le faire, a moins de supprimer les elements qui ne commencentpas par RR ou en remplissant une nouvelle listbox des elements commencant par RR.

By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
0
Utilisateur anonyme
30 oct. 2003 à 13:15
En d'autre termes tu fait :

Rajoute un texte box cacher et rajout ce code
On Error Resume Next ' important evite les bugs
Dim i
Dim QuelIndex As Long ' retiebnt l'element supprimer
For i = 0 To List1.ListCount - 1 ' boucle parcourant list1
Text1.Text = List1.List(i - QuelIndex) ' place dans le text cacher le text de la list
Text1.SelLength = 2 ' selectionne les deux 1 carracteres
If Text1.SelText <> "rr" Then List1.RemoveItem (i - QuelIndex): QuelIndex = QuelIndex + 1 ' regarde si <> "rr" supprimmer
Next i ' fin de boucle


Renfield vas encore dire que ces pas propres et mal optimiser, donc je lui laisse le soins d'optimiser le code.

Encore un truc si tu veux que ca ne respectae pas la case lors de la recherche tu remplace

If Text1.SelText <> "rr" Then List1.RemoveItem (i - QuelIndex): QuelIndex = QuelIndex + 1 


PAr :

If Ucase(Text1.SelText) <> Ucase("rr") Then List1.RemoveItem (i - QuelIndex): QuelIndex = QuelIndex + 1 

Ca marche tres bien!!
Voila ;)
0
Utilisateur anonyme
30 oct. 2003 à 13:16
A au fait j'ai oublier pour ta recherche remplace "rr" par ce que tu veux
Voila ;)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 oct. 2003 à 15:26
Je crains fort de devoir encore "critiquer", et oui !!
mais c'est pour ton bien !!!
Tu me connais, j'adore faire ca !! (d'ailleurs, tu avais prévu le coup :) )

pourquoi utiliser un TextBox ??
tu pourrais très bien utiliser la fonction Left$ :

if Left$ ( List1.list ( i ) ) = "rr" Then...


enfin voila...

sinon, tu pourrais aussi utiliser les API, tel que je l'aurais fait :

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const LB_FINDSTRING = &H18F

Private Sub Command1_Click()
    Dim i As Long
    i = SendMessage(List1.hwnd, LB_FINDSTRING, i, ByVal "rr")
    While i <> -1
        List1.RemoveItem i
        i = SendMessage(List1.hwnd, LB_FINDSTRING, i, ByVal "rr")
    Wend
End Sub


en passant ton coup du On Error....
c'est pas terrible : On evite en general de faire des boucles for, quand on ignore le nombre d'iterations a effectuer. et comme tu supprime des elements de ta liste, le nombre d'iteration "Ciblé" change.

si vraiment tu avais voulu faire ca avec un For, il aurait Fallu faire ta boucle a l'envers.

Voici donc, ta boucle optimisée par mes soins (StrComp est plus rapide pour comparer deux chaines, que String1 = String2...)

    Dim i As Long
    For i = List1.ListCount - 1 To 0 Step -1
        If StrComp(Left$(List1.List(i), 2), "rr") = 0 Then
            List1.RemoveItem i
        End If
    Next i


Enfin voila, c'etait pas juste pour critiquer dans le vent, et j'espere t'avoir appris deux trois trucs...

By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;) a
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 oct. 2003 à 15:29
Aïe, je viens de relire l'enoncé.

je me suis trompé dans mon test. Voici donc la version que je soumet a AsselusBorealiss :

    Dim i
    For i = List1.ListCount - 1 To 0 Step -1
        If StrComp(Left$(List1.List(i), 2), "rr") <> 0 Then
            List1.RemoveItem i
        End If
    Next i


ma version avec APi est donc invalide dans le cas présent.... Mais la technique est, je pense interessante neanmoins...

By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
0
Utilisateur anonyme
30 oct. 2003 à 16:45
Merci Renfield ca me permet de m'ameliorer.
Voila ;)
0
Dvlop Messages postés 3 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 9 juillet 2004
9 juil. 2004 à 11:12
Salut, moi c'est la première fois que je viens chercher mes lumières ici !

Je cherche à changer la couleur d'un élément d'une ListBox quand il se trouve dans une autre ListBox.

Comment comparer deux ListBox ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 juil. 2004 à 16:44
Bienvenue sur le Forum ;)

tu devrais reposer ta question sur le Forum, dans une toute nouvelle file....
0
Rejoignez-nous