Problème actualisation Textbox, Déconcertant et urgent !!!!!!!!!

Résolu
Vince62290 Messages postés 18 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 25 décembre 2010 - 22 sept. 2009 à 19:12
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 24 sept. 2009 à 21:40
Bonsoir, dans le cadre d'un projet je me retrouve face à un problème que je n'arrive pas à résoudre et votre aide me serait d'une grande utilité car je tourne vraiment en rond cette fois-ci.

Objectif : parcourir une arraylist à l'aide d'une boucle "pour" et pour chaque objet de la collection, l'afficher dans le contrôle correspondant.

A note que mon problème d'actualisation vient du fait que c'est toujours le meme textbox qui est sollicité .

En résumé si tout se passait bien, la valeur dans mon controle changerait au fur et a mesure que l'on avance dans la collection.

Le plus "marrant" : dans cette meme boucle for, j'arrive à obtenir ce que je veux mais en faisant des messagebox et non pas en renvoyant la valeur dans le contrôle. De plus quand je débogge, l'indice s'incrémente convenablement et la valeur qui doit apparaitre dans la textbox change a chaque nouvel objet de la collection sollicité. Ce qui me perturbe encore plus. Enfin j'ai testé avec un refresh mais rien n'y fait.

Mon code :
//gga est mon arraylist de trame GGa provenant d'un fichier texte
for (int i = 0; i < gga.Count; i++)
{
//le messagebox marche
//MessageBox.Show(gga[i].ToString());
//ça coince ci-dessous (toujours le meme enregistrement dans le contrôle)
txtgga.Text = gga[i].ToString();
}

Merci à vous d'avance !!!!!!!!!

9 réponses

MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
23 sept. 2009 à 09:34
En fait le problème, c'est que la boucle for est extrêmement rapide, pour pallier à ce problème ,on pourrait stopper le thread et rafraichir l'ecran :

for (int i = 0; i < gga.Count; i++) 
{  
    txtgga.Text = gga[i].ToString(); 
    Application.DoEvents();
    Thread.Sleep(250);
}
1
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
23 sept. 2009 à 13:34
Je sais où il y'a une coquille :

nous n'avons pas tout ton code, mais il y'a fort à parier que tu gère la boucle for en une passe (sans multithread et tout), alors pour palier à ce problème, tu intègres un timer à ton formulaire, dans les propriétés, tu passes la propriété 'Enabled' à true et tu mets la propriété 'Interval' à 250 (par exemple), puis dans les events tu lève l'évènement Tick et tu remplis la méthode du tick comme cela :

txtgga.Text = gga[count].ToString(); 

if (count < gga.Count)
    count++;
else
    count = 0;


count est une variable locale à la classe que tu initialises à 0.
1
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
22 sept. 2009 à 19:39
Problème de rafraichissement de l'écran sans doute.

En VB, on mettrait un Application.DoEvents() dans la boucle.
Je ne sais pas si ça existe en C#

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Vince62290 Messages postés 18 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 25 décembre 2010
23 sept. 2009 à 10:40
Merci à vous, merci MasterShadows je teste ça tout de suite et je t'écris ce qu'il en est.
0

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

Posez votre question
Vince62290 Messages postés 18 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 25 décembre 2010
23 sept. 2009 à 11:55
Et bien j'ai toujours le même résultat MasterShadows, toujours le même enregistrement dans mon TextBox. Poour tant ton code marche, car testé sur les message box, on voit un certain laps de temps avant que la prochaine boite de dialogue s'affiche (au passage, pour ceux qu'il veulent l'utiliser ne pas oublie le using System.threading;).

J'espère voir ce problème réglé car mon but est de recevoir à l'avenir des trames GPS par le port série et afficher les différentes informations décodés à partir des trames (heure, latitude, longitude,etc) dans plusieurs contrôles (textbox).

Tout ça en temps réel.
0
Vince62290 Messages postés 18 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 25 décembre 2010
23 sept. 2009 à 22:33
Merci Master Shadows mais ça ne marche toujours pas. Il me met que l'index est hors limites...

Je t'explique mon code dans les grandes lignes :

*1* Dans le code associé au chargement de ma feuille, je parcours un fichier texte et pour chaque ligne (condition SI dans la boulche wuile qui parcourt le fichier), si la ligne commence par "$GPCGGA" alors je l'ajoute dans mon arraylist GGA.

*2* toujours dans la même procédure évènementielle, je lance mon timer après la boucle.

*3* J'ai écris ce que tu m'a donné en code dans l'évènement Tick sans oublier d'initialiser ma variable locale. Bien sur je n'ai appliqué nulle part la méthode Stop puisque c'est une actualisation.

*4* erreur généré dans l'évènement tick sur la ligne ""txtgga.Text = gga[count].ToString();"", index hors limite, pourtant lorsque je débogge avec point d'arrêt mon arraylist est bien remplie et la variable count s'incrémente bien.

Je sèche....lol
0
Vince62290 Messages postés 18 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 25 décembre 2010
23 sept. 2009 à 22:39
AUTANT POUR MOI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Excuse moi j'ai écris trop vite, j'avais remplacer mon fichier texte entre temps par un autre ne contenant qu'une seule ligne $GPCGGA........... pour tester quelque chose.

Me reste plus qu'a régler le temps qu'un enregistrement reste affiché et c'est bon.

Un grand merci à toi Master Shadows, et une réponse acceptée de plus pour toi

Merci
0
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
23 sept. 2009 à 23:34
Parfait alors si le problème est résolu
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
24 sept. 2009 à 21:40
Plus simplement:

 
 for (int i = 0; i < 100; i++)
 {
       // System.Threading.Thread.Sleep(100);
       this.textBox1.Text = i.ToString();
       this.textBox1.Update();
 }


[hr]
-Blog-
-Site Perso-
0
Rejoignez-nous