Listbox récupérer l'action sur l'action haut / bas du scroll

Résolu
jsmeiway Messages postés 32 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 9 septembre 2005 - 2 déc. 2004 à 00:00
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 2 déc. 2004 à 13:01
Bonjour,

J'aimerais savoir comment récupère-t-on l'action du clic (pas un simple clic) lorsque l'on appuie sur le scroll (la flèche) du bas ou du haut de la listbox

J'aimerais sélectionner automatiquement la sélection suivante si j'appuie bas et sélection précédente si j'appuie haut

exemple:
3 valeurs ds la liste box
value1
value2
value3

par defaut la value1 est activé, si j'appuie sur le scroll du bas alors je sélectionne value2, ensuite si j'appuie sur le scroll haut alors je resélection value1...

si une âme charitable peut m'aider :)

merci

mytoo vmeiway

10 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
2 déc. 2004 à 08:11
Tu verras avec ce code que l'objet ListBox ne peut pas gérer ce que tu demandes.

Dim last_list1_topIndex As Long
Private Sub Form_Load()
List1.AddItem "toto"
List1.AddItem "titi"
List1.AddItem "tata"
List1.AddItem "toto"
List1.AddItem "titi"
List1.AddItem "tata"
List1.AddItem "toto"
List1.AddItem "titi"
List1.AddItem "tata"
List1.AddItem "toto"
List1.AddItem "titi"
List1.AddItem "tata"

last_list1_topIndex = 0
End Sub

Private Sub List1_Scroll()
MsgBox "je scrolle"
If List1.TopIndex < last_list1_topIndex Then
    List1.ListIndex = List1.ListIndex - 1
Else
    List1.ListIndex = List1.ListIndex + 1
End If
last_list1_topIndex = List1.TopIndex
End Sub



D'une part, il faut qu'il y ait suffisamment d'éléments dans la ListBox pour faire apparaître une scrollBar, d'autre part, si la barre de défilement ne bouge bas, l'evénement Scroll n'existe plus. Tu limites donc considérablement ton déplacement dans la liste.

Par contre, ce que tu peux faire, c'est ajouter une vScrollBar à côté de ta listBox

Tu places ta ListBox dans une Frame, borderStyle = 0 (None)

Tu t'arranges pour que la Frame soit moins large que la listBox, ce qui permet de cacher la scrollBar de la listBox.

Juste à côté de la frame, tu places une ScrollBar (Microsoft Form 2.0 dans Projets/Composants), de façon à avoir l'illusion que ta nouvelle scrollBar est celle de la listbox.
Puis tu tapes ce code :


Private Sub Form_Load()
    List1.AddItem "toto"
    List1.AddItem "titi"
    List1.AddItem "tata"
    List1.AddItem "toto"
    List1.AddItem "titi"
    List1.AddItem "tata"
    List1.AddItem "toto"
    List1.AddItem "titi"
    List1.AddItem "tata"
    List1.AddItem "toto"
    List1.AddItem "titi"
    List1.AddItem "tata"
    ScrollBar1.Min = 0
    ScrollBar1.Max = List1.ListCount - 1
    List1.ListIndex = 0
End Sub

Private Sub ScrollBar1_Change()
List1.ListIndex = ScrollBar1.Value
End Sub



Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
2 déc. 2004 à 08:38
Autre chose, au lieu de faire :

Private Sub List1_Scroll()
MsgBox "je scrolle"
If List1.TopIndex < last_list1_topIndex Then
List1.ListIndex = List1.ListIndex - 1
Else
List1.ListIndex = List1.ListIndex + 1
End If
last_list1_topIndex = List1.TopIndex
End Sub

Fait plutôt :

Private Sub List1_Scroll()
MsgBox "je scrolle"
If List1.TopIndex < last_list1_topIndex Then
List1.ListIndex = List1.ListIndex - last_list1_topIndex - List1.TopIndex
Else
List1.ListIndex = List1.ListIndex + last_list1_topIndex - List1.TopIndex
End If
last_list1_topIndex = List1.TopIndex
End Sub
_______________________________________

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
3
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
2 déc. 2004 à 00:42
Salut jsmeiway,

je ne connais pas trop ce genre de contrôle mais je suppose qu'il y a au moins l'évènement OnChange ou Change.
> à l'init tu récupère la valeur par défaut dans une global ou une static, sur le Change, tu compare la valeur actuelle avec ta sauvegarde et tu sauras si t'as eu un + ou un -.
Tu fais ton traitement, et tu mets à jour ta globale avec la nouvelle valeur.

Un moyen simple de contourner les éventuelles lacunes ...

Guich
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
2 déc. 2004 à 07:19
Tu peux te baser sur la propriété TopIndex qui te donne l'index de l'élément se trouvant en haut de liste : s'il a été modifié, c'est que l'utilisateur a utilisé le scrollbar, ou la molette de la souris....
_______________________________________

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
0

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

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
2 déc. 2004 à 08:37
Je me répette, je sais, mais évitez d'utiliser les Microsoft Forms 2 : il s'agit d'un activeX développé par Microsoft pour Office qui ne peut pas être déployé avec l'application (on n'en a pas le droit). Donc si tu l'utilise, tu ne pourras pas vendre, ou même créer de setup de ton programme sans être sûr que les clients ont office d'installé !
_______________________________________

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
0
jsmeiway Messages postés 32 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 9 septembre 2005
2 déc. 2004 à 09:01
merci à vous
je vais essayer de voir la 1er solution de econs, ou plutôt la solution (qui a été modifié) de DARKSIDIOUS

mytoo vmeiway
0
jsmeiway Messages postés 32 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 9 septembre 2005
2 déc. 2004 à 09:08
je viens d'essayer la dernière solution de DARKSIDIOUS

en rajoutant une ligne pour la sélection auto

Private Sub List1_Scroll()
dim last_list1_topIndex as integer
If List1.TopIndex < last_list1_topIndex Then
List1.ListIndex = List1.ListIndex - last_list1_topIndex - List1.TopIndex
Else
List1.ListIndex = List1.ListIndex + last_list1_topIndex - List1.TopIndex
End If
last_list1_topIndex = List1.TopIndex
list1.ListIndex= list1.TopIndex
End Sub

encore merci
mytoo vmeiway
0
jsmeiway Messages postés 32 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 9 septembre 2005
2 déc. 2004 à 09:24
j'ai eu des soucis lorsque j'ai plusieurs items
et 1er solution de econs convient plus à mon projet

List1.ListIndex = List1.ListIndex - last_list1_topIndex - List1.TopIndex
Else
List1.ListIndex = List1.ListIndex + last_list1_topIndex - List1.TopIndex

par
List1.ListIndex = List1.ListIndex - 1
Else
List1.ListIndex = List1.ListIndex + 1

j'ai aussi déclaré last_list1_topIndex
public last_list1_topIndex as integer
car je récupère la valeur chargé au formulaire (qui n'est pas toujours 0 ;))
List1.ListIndex=varmemoriser
last_list1_topIndex=List1.ListIndex

mytoo vmeiway
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
2 déc. 2004 à 09:44
DARK > Aah .. ? J'savais pas pour Microsoft Forms 2.0
J'ai pas dû lire tous tes posts ... :)

Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
2 déc. 2004 à 13:01
Mets plutôt ceci :

Private Sub List1_Scroll()
STATIC last_list1_topIndex as integer
If List1.TopIndex < last_list1_topIndex Then
List1.ListIndex = List1.ListIndex - last_list1_topIndex - List1.TopIndex
Else
List1.ListIndex = List1.ListIndex + last_list1_topIndex - List1.TopIndex
End If
last_list1_topIndex = List1.TopIndex
list1.ListIndex= list1.TopIndex
End Sub

Car sans le "static", ta variable perd sa valeur à chaque fois !
_______________________________________

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
0
Rejoignez-nous