Fonction d'une Listbox

[Résolu]
Signaler
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011
-
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011
-
    Bonjour tout le monde,

J'ai un petit problème avec une Listbox, j'explique :
J'ai une Form avec une Listbox (14 choix possible de "list1.listindex 0"  à "list1.listindex 13").

L'utilisateur de la form n'a pas de souris pour naviguer sur celle-ci. Donc j'aimerai à l'aide des flèches multidirectionnels que lorsque l'utilisateur arrive au dernier choix ("list1.listindex = 13") et qu'il ne l'utilise pas, la sélection remonte sur le 1er choix).

J'ai fait plusieurs tentatives mais aucune ne marchent :

'Dans ce cas ça me permet pas du tout d'aller à l'index 13 car dès que la sélection arrive dessus il passe de suite sur l'index 0.
Private Sub List1_Click()
If List1.ListIndex = 13 then
List1.ListIndex = 0
End If
End Sub

'Autre test, en testant un peu les capacités de Google, j'ai trouvé le code ASCII des flèches :<li>Le code ASCII de la flèche du haut 328</li><li>Le code ASCII de la flèche du gauche 331</li><li>Le code ASCII de la flèche du droite = 333</li><li>Le code ASCII de la flèche du bas = 336</li>Mais VB6 n'a pas l'air de prendre en compte ses codes, normal ou pas ?
Donc bien sur ma ligne de commande suivante ne marche guère :

Private Sub List1_KeyPress(KeyAscii As Integer)If List1.ListIndex 13 and KeyAscii 336 then

List1.ListIndex = 0

End If

End Sub

Help Me please ...

20 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Ouais (j'en ai "bouffé la moitié) ...

dernier jus, donc

Private Sub Form_Activate()
  For i = 1 To 10
    List1.AddItem i
  Next
  List1.AddItem "", 0 ' attention, achtung ! Sumamente importante ...
  List1.AddItem ""    ' attention, achtung ! Sumamente importante ...
  List1.TopIndex = 1
End Sub




Private Sub List1_Keyup(KeyCode As Integer, Shift As Integer)
 If List1.ListIndex > 0 And List1.ListIndex < List1.ListCount - 1 Then Exit Sub If List1.ListIndex 0 And (KeyCode 37 Or KeyCode = 38) Then
   List1.Selected(List1.ListCount - 2) = True
   DoEvents
   Exit Sub
 End If If List1.ListIndex List1.ListCount - 1 And (KeyCode 39 Or KeyCode = 40) Then
   List1.Selected(1) = True
 End If
End Sub
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Ouais...

ouvre quand même ta boîte .... tu as un petit cadeau (je me suis débarrassé des 2 lignes vides rajoutées).
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
14
Salut,

Regarde une des propriété de Listbox : List1.Selected(Index) = True

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
14
Re,

Cela pourrait donner un truc du genre :

Private Sub List1_KeyPress(KeyAscii As Integer)If KeyAscii 13 Then List1.Selected(0) True
End Sub

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Salut Exploreur,

Le problème se corse, car l'utilisateur n'as pas accès non plus à la touche entrée (KeyAscii=13)

Je m'explique, en faite c'est un programme qui va être destiner à être placer dans une borne d'arcade, donc l'utilisateur en question à plusieurs possibilité sur la listbox :

La manette haut bas gauche droite qui correspond aux flèches.
Le boutton 1 qui valide la sélection
Le boutton 2 pour revenir au menu précédent

Donc j'arrive bien à naviguer dans ma listbox avec les flèches, mais je n'arrive pas à le faire revenir au début de ma listbox.

Y a t'il une solution pour que VB6 reconnaisse un keypress sur les flèches ?
où alors une autre solution ?

En tout cas merci, A++
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Bonjour,

1) les flêches sont( reconnues par le Keydown et le Keyup, pas par le Keypress...

2) je ne vois pas pourquoi gérer l'utilisation des flêches, déjà gérée par une Listbox (évenement scroll)

voilà à peu de choses près (bâclé ici) ce que je me contenterais de faire :

Private Sub Form_Activate()
  For i = 1 To 10
    List1.AddItem i
  Next
  List1.AddItem ""    ' attention, achtung ! Sumamente importante ...
End Sub

Private Sub List1_Scroll()
 If List1.Selected(List1.ListCount - 1) Then
    List1.TopIndex = 0
    List1.Selected(0) = True
  End If
End Sub
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Super ça marche, merci Jmfmarques !
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Re tout le monde,

En faite je me suis un peu enflammer en acceptant ta réponse un peu trop tot Jmfmarques.

Je réexplique mon problème :

Voici les touches qui peuvent être utilisé :
Haut    -   Bas   -    Gauche   -    Droite  

Dans ma listbox qui compte 14 lignes, je souhaiterai que quand on se trouve sur la ligne 1 et qu'on appuie sur la fleche haut (et seulement la flèche haut) on arrive sur la ligne 14.
Pareil dans l'autre sens, quand on se trouve sur la ligne 14 et qu'on appuie sur la flèche bas on revient à ligne 1.

Merci pour votre aide
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
14
Re, et bonsoir Jmfmarques,

SnapFAB >> Regarde ce que dit Jmfmarques dans son poste...(Indice...petit 1)

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Re Exploreur,

J'ai bien compris que les fleches sont reconnues par le Keydown et le Keyup, (mais pas le Keypress malheureusement) mais le problème avec le Keydown et le Keyup c'est qu'ils prennent n'importe quel touche appuyé, alors comment faire comprendre que c'est sur bas qu'on appuie ?

J'ai essayé ça :

Private Sub List_Genre_KeyDown(KeyCode As Integer, Shift As Integer)

If List_Genre.ListCount - 1 = List_Genre.ListIndex Then
    List_Genre.ListIndex = 0
    List_Genre.ListIndex = -1
End If

End Sub

Mais le problème avec ce code là c'est que je ne peut plus valider ma dernière ligne.
J'ai essayer un if keyascii = 336 dans un keydown mais ça marche pas.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Quoi ?

Encore avec ces flêches ???

Je n'en veux point ...

Un peu d'acrobatie est toujours mieux ...

exemple :

Private Sub Form_Activate()
  For i = 1 To 10
    List1.AddItem i
  Next
  List1.AddItem ""    ' attention, achtung ! Sumamente importante ...
  List1.AddItem "", 0 ' atchtung également ! cuidado
  List1.TopIndex = 1
End Sub




Private Sub List1_Scroll()  If List1.ListIndex 0 Then List1.Selected(List1.ListCount - 2) True  If List1.ListIndex List1.ListCount - 1 Then List1.Selected(1) True
End Sub


 
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Et puis (allerz, va...)

Si tu y tiens, à tes petites flêches, voilà :

Private Sub Form_Activate()
  For i = 1 To 10
    List1.AddItem i
  Next
End Sub




Private Sub List1_Keyup(KeyCode As Integer, Shift As Integer)
 If List1.ListIndex > 0 And List1.ListIndex < List1.ListCount - 2 Then Exit Sub If List1.ListIndex 0 And (KeyCode 37 Or KeyCode = 38) Then
   List1.Selected(List1.ListCount - 1) = True
   DoEvents
   Exit Sub
 End If If List1.ListIndex List1.ListCount - 1 And (KeyCode 39 Or KeyCode = 40) Then
   List1.Selected(0) = True
 End If
End Sub

Tu remarqueras 2 choses :

1) je n'ajoute aucune ligne à la liste (pas la peine)
2) je n'utilise pas l'évènement Keydown (surtout pas) mais keyup ...

Pourquoi keyup ? Fastoche, l'évènement keydown déclencherait le scroll prématurément et tout serait décalé d'une ligne.

Bon appétit....(j'ai faim)
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Merci jmfmarques, cette gymnastique marche pas mal du tout.
Il me faut encore pouvoir cacher la barre de défilement car elle a aucune utilité, et elle c'est juste mise par le rajout des List1.AddItem ""
C'est possible de pouvoir faire ça ?
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Toi, t'es gourmand, là ...

Bon... je regarde si c'est possible ...

A bientôt (peut-être)...
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Coucou (déjà...)

Fastoche : tu mets ta listbox dans un Frame plus petit et... makash ya plus la barre de défilement ...

Allez

Mets résolu, maintenant .... afin que ce sujet n'en soit pas un à tiroirs sans fin...

Amitiés
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Re jmfmarques, (j'espère que t'as bien manger ...)
(désolé mon post ci dessus concernait ta première solution)

Par contre pour la deuxième solution que j'ai pas encore decortiquer entièrement, je dis "MAGNIFIQUE" mais :

Ca marche impec pour passer de la première ligne à la dernière.
Par contre impossible de selectionner la dernière ligne, il passe auto à la première ligne.
De même si je descend de quelques lignes et que je fais marche arrière on arrive plus sur la première ligne.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
T'as raison (j'avais trop faim)

Alors ?

Voila :

Private Sub Form_Activate()
  For i = 1 To 10
    List1.AddItem i
  Next
  List1.AddItem ""    ' attention, achtung ! Sumamente importante ...
End Sub




Private Sub List1_Keyup(KeyCode As Integer, Shift As Integer)
 If List1.ListIndex > 0 And List1.ListIndex < List1.ListCount - 1 Then Exit Sub If List1.ListIndex 0 And (KeyCode 37 Or KeyCode = 38) Then
   List1.Selected(List1.ListCount - 2) = True
   DoEvents
   Exit Sub
 End If If List1.ListIndex List1.ListCount - 1 And (KeyCode 39 Or KeyCode = 40) Then
   List1.Selected(0) = True
 End If
End Sub
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
14
Re,

SnapFAB >> C'est un sacré paquet de carambar tout vert que tu va devoir à Jmfmarques...

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Vendu !
En tout cas un grand grand merci !!!

Ca me convient encore pas tout à fait, mais je vais laisser le forum un peu tranquille.
En faite le truc qui me convient pas c'est de voir le scroll quand on passe du dernier au premier et vice versa, ça saute un peu à l'oeil, mais je crois que j'ai un problème
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Merci pour le cadeau !