Listbox récupérer l'action sur l'action haut / bas du scroll [Résolu]

jsmeiway 32 Messages postés mardi 24 août 2004Date d'inscription 9 septembre 2005 Dernière intervention - 2 déc. 2004 à 00:00 - Dernière réponse : cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention
- 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
Afficher la suite 

10 réponses

econs 4066 Messages postés mardi 13 mai 2003Date d'inscription 23 décembre 2008 Dernière intervention - 2 déc. 2004 à 08:11
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 2 déc. 2004 à 08:38
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
gandalflegris007 211 Messages postés lundi 31 mars 2003Date d'inscription 11 juin 2007 Dernière intervention - 2 déc. 2004 à 00:42
0
Utile
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
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 2 déc. 2004 à 07:19
0
Utile
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
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 2 déc. 2004 à 08:37
0
Utile
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
jsmeiway 32 Messages postés mardi 24 août 2004Date d'inscription 9 septembre 2005 Dernière intervention - 2 déc. 2004 à 09:01
0
Utile
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
jsmeiway 32 Messages postés mardi 24 août 2004Date d'inscription 9 septembre 2005 Dernière intervention - 2 déc. 2004 à 09:08
0
Utile
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
jsmeiway 32 Messages postés mardi 24 août 2004Date d'inscription 9 septembre 2005 Dernière intervention - 2 déc. 2004 à 09:24
0
Utile
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
econs 4066 Messages postés mardi 13 mai 2003Date d'inscription 23 décembre 2008 Dernière intervention - 2 déc. 2004 à 09:44
0
Utile
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.
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 2 déc. 2004 à 13:01
0
Utile
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.