Listbox refresh et sélection

Résolu
fedia76 Messages postés 9 Date d'inscription mardi 21 mars 2006 Statut Membre Dernière intervention 2 août 2013 - 8 avril 2007 à 17:15
fedia76 Messages postés 9 Date d'inscription mardi 21 mars 2006 Statut Membre Dernière intervention 2 août 2013 - 9 avril 2007 à 09:32
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

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
8 avril 2007 à 23:31
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...
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
8 avril 2007 à 18:13
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é...
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
8 avril 2007 à 18:18
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.
0
fedia76 Messages postés 9 Date d'inscription mardi 21 mars 2006 Statut Membre Dernière intervention 2 août 2013
8 avril 2007 à 23:09
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.
0

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

Posez votre question
fedia76 Messages postés 9 Date d'inscription mardi 21 mars 2006 Statut Membre Dernière intervention 2 août 2013
8 avril 2007 à 23:51
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é ?
0
fedia76 Messages postés 9 Date d'inscription mardi 21 mars 2006 Statut Membre Dernière intervention 2 août 2013
9 avril 2007 à 00:04
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 !
0
diablamanshadow Messages postés 419 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 28 janvier 2008
9 avril 2007 à 01:24
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 :-)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 avril 2007 à 07:48
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.
0
fedia76 Messages postés 9 Date d'inscription mardi 21 mars 2006 Statut Membre Dernière intervention 2 août 2013
9 avril 2007 à 09:32
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.
0
Rejoignez-nous