Scrollbar de ListBox

Résolu
Captain_Bomber Messages postés 36 Date d'inscription lundi 4 septembre 2006 Statut Membre Dernière intervention 4 mai 2007 - 4 déc. 2006 à 10:26
Captain_Bomber Messages postés 36 Date d'inscription lundi 4 septembre 2006 Statut Membre Dernière intervention 4 mai 2007 - 4 déc. 2006 à 11:39
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

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 déc. 2006 à 11:18
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# 
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 déc. 2006 à 10:37
Salut

Utilises la méthode ScrollToCaret

Mx
MVP C# 
0
Captain_Bomber Messages postés 36 Date d'inscription lundi 4 septembre 2006 Statut Membre Dernière intervention 4 mai 2007
4 déc. 2006 à 10:48
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...
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 déc. 2006 à 11:06
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# 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Captain_Bomber Messages postés 36 Date d'inscription lundi 4 septembre 2006 Statut Membre Dernière intervention 4 mai 2007
4 déc. 2006 à 11:13
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...
0
Captain_Bomber Messages postés 36 Date d'inscription lundi 4 septembre 2006 Statut Membre Dernière intervention 4 mai 2007
4 déc. 2006 à 11:39
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
0