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é.
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...
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.
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).
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
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.
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.