AutoScrolling dans une ListBox ? possible ?

Signaler
Messages postés
216
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
17 septembre 2008
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Salut tout l'monde, voilà j'ai une question qui parait bénine mais plutot importante pour moi: est-ce que quelqu'un saurait comment faire pour qu'une listBox défile automatiquement au fur et à mesure que les éléments y sont ajoutés ?

Je vous décris rapidement mon appli: la listeBox enregistre un historique des connexions et des déconnexions, donc à chaque nouvelle (de)connexion, hop, j'ajoute une ligne avec les infos et une ligne vide...mais le problème c'est que l'ajout se fait bien en bas de la liste, mais on voit toujours le haut, ça descend pas...j'ai fait en sorte qu'elle ne soit pas sélectionnable non plus, enfin les éléments qu'elle contient ne peuvent pas être sélectionnés...

Peut-être une solution: simuler l'événement d'un clic sur le bouton 'descendre' de la scrollBar ...? mais comment faire...?

Merci de votre aide !

"Un seul Être vous manque, et tout est dépeuplé..."

6 réponses

Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
6
Tu as deux solutions :



Soit tu utilises la propriété SelectedIndex de ta list box et tu lui
donnes comme valeur MaListBox.Items.Count - 1. Ceci aura pour effet de
sélectionner le dernier élément de la liste et celà fera donc descendre
l'ascenseur automatiquement.



La seconde option est d'utiliser une ListView plutot qu'une listBox. Il
faut avant tout la mettre la propriété View sur Details et apprendre à
s'en servir correctement (si tu ne connais pas ce composant). Après,
lorsque tu veux ajouter un élément à ta liste, tu fais :



ListViewItem it = new ListViewItem();

it.Text = "test";

listView1.Items.Add(it);

it.EnsureVisible();



Ce que tu peux constater ici c'est le it.EnsureVisible, qui va provoquer un scroll de la liste jusqu'à l'élément en question...



Dernière précision, si ceci ne fonctionne pas, c'est parfois parceque
l'on traite la chose dans une boucle, ce qui peut figer l'affichage. Je
préconise donc un petit Application.DoEvents() juste après le
it.EnsureVisible();



Voila, en espérant que ca fonctionne pour toi,



Yoann
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
Salut,

Tu peux te servir des Apis en envoyant le message WM_VSCROLL :


private const int WM_VSCROLL = 0x0115;
private const int SB_BOTTOM = 7;

[DllImport("User32.dll")]
private static extern int SendMessage(
IntPtr hWnd,
int Msg,
int wParam,
int lparam
);

Utilisation :
SendMessage(listBox.Handle, WM_VSCROLL, SB_BOTTOM, 0 );

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
Huhu j'avais oublier le SelectedIndex

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
216
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
17 septembre 2008

Bon ben merci j'ai testé avec le count, ca marche, mais je ne sais pas si ca conviendra à mon maitre de stage niveau ergonomique, auquel cas j'utiliserai la ListView qui me semble pas trop mal, bien que je n'y connaisse rien...merci en tous cas :)

"Un seul Être vous manque, et tout est dépeuplé..."
Messages postés
216
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
17 septembre 2008

Coq, je te remercie, je garde ton info de coté car je ne sais pas du tout une seule chose sur les APIs, donc si mon tuteur me dis que c'est pas super, j'testerais l'une de vos 2 solutions à vous 2 :):) merci!

"Un seul Être vous manque, et tout est dépeuplé..."
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
de rien :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#