Listbox refresh et sélection [Résolu]

Signaler
Messages postés
9
Date d'inscription
mardi 21 mars 2006
Statut
Membre
Dernière intervention
2 août 2013
-
Messages postés
9
Date d'inscription
mardi 21 mars 2006
Statut
Membre
Dernière intervention
2 août 2013
-
Bonjour à tous

Alors, je vais essayé d'être clair mais ca ne va pas être facile...

J'ai une listbox assez grande pour voir apparaitre un ascensseur vertical.
mon logiciel modifie le nom des éléments de la listbox assez régulièrement sans intervention de l'utilisateur.

Le problème : quand je sélectionne un élément, puis que je déplace l'ascensseur de sorte que je ne vois plus la sélection et enfin que mon logiciel réécrit un élément, alors la listbox redéplace l'ascensseur automatiquement pour retourner à ma sélection.
Ceci est très génant; Y a-t-il un moyen d'empêcher cela ?

PS : j'espère que j'ai posté dans la bonne catégorie, sinon, je suis désolé.

9 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Ouille !
Voilà qui est différent...
Bon !
Je n'ai pas VB.Net pour tester, mais ceci devrait marcher :

Dans l'événement Scroll de ta listbox, donner à une vatiable yoyo la valeut du topindex de ta listbox (valeur qui changera donc avec ton scroll)
la variable toto devra être déclarée dans la partie "générale" de ton code.

Dans la partie qui modifie des choses périodiquement dans ta listeBox : après tes modifs : relis la valeur de cette variable et donne cette valeur au topindex de ta listbox (qui reviendra donc où tu l'avais "scrollée").
Ol te faudra toutefois prévoir un petit artifice pour que celà ne se répète pas quand tu ne le souhaites plus (sans doute à la fin des modifs faites par ton logiciel et, également, au lostfocus de ta listbox). Choisir alors une valeur arbitraire "significative" (par exemple 999 et dire qu'il faut ignorer le replacement si toto = 999 et ne le faire que si toto < 999)

Voilà ! C'est un peu d'acrobatie, mais qui doit marcher...
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Bonjour,


Utilise alors une comboBox...


Si tu tiens à ta listBox, rien ne t'empêche de l'assortir d'une textbox associée et d'y faire apparaître l'article séléctionné...
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Plus simple encore : utilise la propriété Tooltiptext de ta listbox et attribue-lui le texte sélectionné par un click ...
Cette valeur sera affiché jusqu'à la prochaine sélection.
Messages postés
9
Date d'inscription
mardi 21 mars 2006
Statut
Membre
Dernière intervention
2 août 2013

Merci jmjmarques pour tes réponses.


Malheuresement, ce n'est pas ce que je recherche.


Je vais donner un exemple pour essayer d'être plus clair :


J'ai selectionner le deuxième élément de ma listbox.
Puis, j'ai descendu l'ascenseur pour voir les éléments plus bas : je vois à présents les éléments 15 à 25.
Si mMon logiciel modifie le nom d'un élément (n'importe lequel) de la listbox, alors l'ascenseur de la listbox remonte et je vois les éléments 2 à 12.


Le problème, c'est que si j'essaie de lire des éléments plus loin dans la listbox et que mon logiciel modifie par exemple toute les secondes un élément, la listbox remonte toute les secondes à l'élément sélectionner et je ne peut pas lire ce qu'il y a plus bas dans la listbox (trop court en 1 seconde).

Voila, j'éspère avoir été plus clair.
Messages postés
9
Date d'inscription
mardi 21 mars 2006
Statut
Membre
Dernière intervention
2 août 2013

Je ne trouve ni l'évenemtn scroll, ni la propriété topindex (ni aucun truc qui y ressemble).
VB.net aurait-il tant régressé ?
Messages postés
9
Date d'inscription
mardi 21 mars 2006
Statut
Membre
Dernière intervention
2 août 2013

Mille excuses !
La propriété topindex existe toujours !!!
L'évenement scroll en revanche a disparu (http://msdn2.microsoft.com/fr-fr/library/cxh2w9wf(VS.80).aspx).
Mais je ne pense pas en avoir besoin.
Merci !
Messages postés
419
Date d'inscription
lundi 30 août 2004
Statut
Membre
Dernière intervention
28 janvier 2008

au dessus de tout ton code :

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

apres ton refresh tu fais :

temp = list1.list(list.listindex)
List1.ListIndex = SendMessage(List1.hwnd, LB_FINDSTRING, -1, ByVal CStr(Temp))

comme ca apres ton refresh tu stock le texte de ta selection et ensuite tu le recherche dans ta listbox et il la selectionne directement :-)
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Bonjour,
Désolé d'apprendre la disparition de la propriété scroll avec VB.Net !...

Mais celà ne fait rien. Tu peux largement t'en passer ainsi :

Dans la fonction ou routine qui, venant modifier des éléments de ta listbox (et en suivant toujours le même raisonnement quecelui exposé plus haut) :
1) avant chaque modification par ta fonction ou routine : donner à la variable toto la valeur du top index présent
2) juste après chaque modif faite par ta fonction ou routine : reforcer le topindex à la valeur de toto.
Messages postés
9
Date d'inscription
mardi 21 mars 2006
Statut
Membre
Dernière intervention
2 août 2013

C'est en effet comme ca que j'ai fait jmjmarques, merci !
Diablamanshadow, je n'ai pas tout compris ce que ton code faisait, mais je vais quand même le tester, pour voir.