Scrollbar de ListBox [Résolu]

Signaler
Messages postés
36
Date d'inscription
lundi 4 septembre 2006
Statut
Membre
Dernière intervention
4 mai 2007
-
Messages postés
36
Date d'inscription
lundi 4 septembre 2006
Statut
Membre
Dernière intervention
4 mai 2007
-
Bonjour a tous !

Je suis entrain de faire un chat client-serveur (style msn), dnas lequel les messages reçus sont affichés dans une ListeBox.

Le problème est qu'au bout d'une dizaine de messages reçus, la scrollbar vertical s'active (normal) mais elle reste en haut et les derniers mesages ne sont donc pas visibles (a moins de scroller manuellement).

Y a-t-il un moyen de faire descendre cette Scrollbar automatiqement svp?

6 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
Salut

Il y a forcément quelquechose qui fait que ton thread interragit avec ton ListBox (ou un autre controle de ta Form).
Tu peux nous montrer un bout de code si tu veux, pour qu'on regarde ce qui se passe.

Pour résoudre ce problème, c'est ici ;)

Mx
MVP C# 
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
Salut

Utilises la méthode ScrollToCaret

Mx
MVP C# 
Messages postés
36
Date d'inscription
lundi 4 septembre 2006
Statut
Membre
Dernière intervention
4 mai 2007

MorpionMX est-tu certain que cette méthode est applicable sur une ListBox?
Car il me semble qu'elle n'est valable que pour les TextBox...
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
Mince, en effet, j'ai pas vu que c'était pour une ListBox. Voila ce que c'est de vouloir aller trop vite

Dans ce cas, plusieurs solutions s'offrent a toi :

Soit tu choisis le dernier élément ajouté :

<hr />this.listBox1.SelectedIndex =
this.listBox1.Items.Count - 1;

<hr />
ou alors via interop :

<hr />

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);

Et dans ta méthode tu appelles : SendMessage(listBox1.Handle, WM_VSCROLL, SB_BOTTOM, 0);

<hr />

Mx
MVP C# 
Messages postés
36
Date d'inscription
lundi 4 septembre 2006
Statut
Membre
Dernière intervention
4 mai 2007

Merci bien, cela résout le problème de la scrollbar.

Cependant, un autre problème surgit quand le code passe sur cette ligne.

"Opération inter-threads non valide : le contrôle 'BoxMessage' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé."

Il y a bien un thread dans mon code, mais il ne sert que pour automatiser la réception de messages. L'affichage de ce message dans la ListeBox ainsi que la sélection du dernier objet se font bien plus tard et dans le Form principal....

j'avoue ne pas très bien comprendre...
Messages postés
36
Date d'inscription
lundi 4 septembre 2006
Statut
Membre
Dernière intervention
4 mai 2007

Le coup du delegate a tout réglé merci!
Les objets sont sélectionnés dès qu'ils sont ajoutés et la scrollbar descend...(au poil quoi!!).

Maintenant il me reste a gérer la déconnexion d'un client (qui fait tout planter pour le moment) mais ceci.... est une autre histoire...

Mais je sait où venir si j'ai des problèmes...

@+ et que l'astuche soit avec toi