Listbox-multiselection: le retour?

Résolu
sly63 Messages postés 25 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 11 novembre 2004 - 30 août 2004 à 19:31
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 31 août 2004 à 13:01
Bonjour,
J'ai vu des questions similaires dans le forum mais aucune ne marche sur mon cas particulier.

J'ai deux listbox: List1 et List2.
List1 est en mode multiselect 2 - Extended (pour d'autres utilisations)
List2 est en mode "none 0", classement alphabetique (sorted).
En gros List2 est une sous-liste de List1.

En clickant sur un element de List2, je souhaiterais voir le meme element apparaitre sur List1.

Pas de problème si LIST1 n'est pas en mode multiselect-2-extended. Alors, les 2 lignes suivantes sont suffisantes:
A$ = List2.Text
List1.Text = A$

Je veux la meme chose mais en conservant LIST1 en mode extended.

Merci d'avance,

Sly

5 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 août 2004 à 21:54
Voila un bout de code qui pourrias t'aider :

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Const LB_FINDSTRINGEXACT As Long = &H1A2

Private Sub List2_Click()
    Dim i As Integer
    For i = 0 To List1.ListCount - 1
        List1.Selected(i) = False
    Next i
    List1.Selected(SendMessage(List2.hwnd, LB_FINDSTRINGEXACT, 0, ByVal List2.Text)) = True
    List1.SetFocus
End Sub


Amusez-vous ! ;)
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS
3
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
30 août 2004 à 22:09
Ou,

Private Sub List2_Click()
Dim i As Integer

For i = 0 To List1.ListCount - 1
If List1.List(i) = List2.Text Then
List1.ListIndex = i
Exit For
End If
Next

End Sub


Cordialement, CanisLupus

Tous les glands ne deviennent pas des chênes mais tous les chênes ont été des glands
3
sly63 Messages postés 25 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 11 novembre 2004
31 août 2004 à 11:15
Merci bp a vous deux.
Je me suis servi des deux reponses pour composer ma solution.
La reponse de Renfield me paraissait un peu complique par l'usage d'une dll. La reponse de CanisLupus etait tres proche de ce que je voulais, sauf que le texte de List1 n'etait pas mis en surbrillance.

Voici le bout de code qui marche pour moi:

Private Sub List2_Click()
Dim boucle As Integer

'efface toutes les selections precedentes
For boucle = 0 To List1.ListCount - 1
List1.Selected(boucle) = False
Next boucle

'selectionne seulement un element de la List1
For boucle = 0 To List1.ListCount - 1
If List1.List(boucle) = List2.Text Then
List1.ListIndex = boucle
List1.Selected(boucle) = True
Exit For
End If
Next

End Sub
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
31 août 2004 à 12:47
sly63 n'oublies pas de cocher une ou plusieurs reponses comme acceptée ça permet d'aider ceux qui ont le même souci que toi.

It@li@
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
31 août 2004 à 13:01
Pour info, je n'ai utilisé qu'une API : une fonction dispo dans l'une des Dll de Windows....

C'est théoriquement ce qui se fait de plus rapide, surtout si tes listes sont pas mal remplies....

Amusez-vous ! ;)
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS
0
Rejoignez-nous