Listbox refresh et sélection [Résolu]

fedia76 9 Messages postés mardi 21 mars 2006Date d'inscription 2 août 2013 Dernière intervention - 8 avril 2007 à 17:15 - Dernière réponse : fedia76 9 Messages postés mardi 21 mars 2006Date d'inscription 2 août 2013 Dernière intervention
- 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é.
Afficher la suite 

9 réponses

Répondre au sujet
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 8 avril 2007 à 23:31
+3
Utile
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...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 8 avril 2007 à 18:13
0
Utile
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é...
Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 8 avril 2007 à 18:18
0
Utile
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.
Commenter la réponse de jmfmarques
fedia76 9 Messages postés mardi 21 mars 2006Date d'inscription 2 août 2013 Dernière intervention - 8 avril 2007 à 23:09
0
Utile
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.
Commenter la réponse de fedia76
fedia76 9 Messages postés mardi 21 mars 2006Date d'inscription 2 août 2013 Dernière intervention - 8 avril 2007 à 23:51
0
Utile
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é ?
Commenter la réponse de fedia76
fedia76 9 Messages postés mardi 21 mars 2006Date d'inscription 2 août 2013 Dernière intervention - 9 avril 2007 à 00:04
0
Utile
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 !
Commenter la réponse de fedia76
diablamanshadow 420 Messages postés lundi 30 août 2004Date d'inscription 28 janvier 2008 Dernière intervention - 9 avril 2007 à 01:24
0
Utile
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 :-)
Commenter la réponse de diablamanshadow
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 9 avril 2007 à 07:48
0
Utile
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.
Commenter la réponse de jmfmarques
fedia76 9 Messages postés mardi 21 mars 2006Date d'inscription 2 août 2013 Dernière intervention - 9 avril 2007 à 09:32
0
Utile
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.
Commenter la réponse de fedia76

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.