fedia76
Messages postés9Date d'inscriptionmardi 21 mars 2006StatutMembreDernière intervention 2 août 2013
-
8 avril 2007 à 17:15
fedia76
Messages postés9Date d'inscriptionmardi 21 mars 2006StatutMembreDerniè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é.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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...
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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.
fedia76
Messages postés9Date d'inscriptionmardi 21 mars 2006StatutMembreDerniè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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
diablamanshadow
Messages postés419Date d'inscriptionlundi 30 août 2004StatutMembreDernière intervention28 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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.
fedia76
Messages postés9Date d'inscriptionmardi 21 mars 2006StatutMembreDerniè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.