Problème actualisation Textbox, Déconcertant et urgent !!!!!!!!! [Résolu]

Vince62290 18 Messages postés vendredi 19 décembre 2008Date d'inscription 25 décembre 2010 Dernière intervention - 22 sept. 2009 à 19:12 - Dernière réponse : cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention
- 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 !!!!!!!!!
Afficher la suite 

9 réponses

Répondre au sujet
MasterShadows 269 Messages postés lundi 1 mars 2004Date d'inscription 19 avril 2012 Dernière intervention - 23 sept. 2009 à 09:34
+1
Utile
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);
}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de MasterShadows
MasterShadows 269 Messages postés lundi 1 mars 2004Date d'inscription 19 avril 2012 Dernière intervention - 23 sept. 2009 à 13:34
+1
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de MasterShadows
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 22 sept. 2009 à 19:39
0
Utile
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
Commenter la réponse de cs_casy
Vince62290 18 Messages postés vendredi 19 décembre 2008Date d'inscription 25 décembre 2010 Dernière intervention - 23 sept. 2009 à 10:40
0
Utile
Merci à vous, merci MasterShadows je teste ça tout de suite et je t'écris ce qu'il en est.
Commenter la réponse de Vince62290
Vince62290 18 Messages postés vendredi 19 décembre 2008Date d'inscription 25 décembre 2010 Dernière intervention - 23 sept. 2009 à 11:55
0
Utile
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.
Commenter la réponse de Vince62290
Vince62290 18 Messages postés vendredi 19 décembre 2008Date d'inscription 25 décembre 2010 Dernière intervention - 23 sept. 2009 à 22:33
0
Utile
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
Commenter la réponse de Vince62290
Vince62290 18 Messages postés vendredi 19 décembre 2008Date d'inscription 25 décembre 2010 Dernière intervention - 23 sept. 2009 à 22:39
0
Utile
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
Commenter la réponse de Vince62290
MasterShadows 269 Messages postés lundi 1 mars 2004Date d'inscription 19 avril 2012 Dernière intervention - 23 sept. 2009 à 23:34
0
Utile
Parfait alors si le problème est résolu
Commenter la réponse de MasterShadows
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 24 sept. 2009 à 21:40
0
Utile
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-
Commenter la réponse de cs_Bidou

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.