Meilleur auteur de réponses
Updater un StatusLabel

Question
-
Bonjour à tous,
Dans mon application, j’ai placé un control StatusStrip qui contient un ToolStripStatusLabel.
Mon StatusLabel est initialisé à « Locked » au départ puis il varie entre « Locked » et « Unlocked » en court d’utilisation.
Le but est que ce label se mette à jour plusieurs fois en cours d'utilisation.
Mon problème est que le texte de mon StatusLabel ne change pas.
D’après les recherches que j’ai faites, il semblerait que ce soit un problème de Thread mais j'ai un peu de mal.
J’ai testé plusieurs choses mais cela ne change pas.
Voici mon code :
statusMode.Text += String.Format("{0}", lockStatus.ToString()); statusMode.Invalidate(); statusStripUserSession.Invalidate(); statusStripUserSession.Refresh();
le statusMode c'est mon StatusLabel et le statusStripUserSession est StatusStrip.
J'ai aussi testé en ajoutant un Application.DoEvents() qui force normalement le rafraichissement, mais là aussi ça ne change rien.
Auriez-vous une idée ou une piste?
Merci
Réponses
-
Bonsoir,
Vous devriez essayerstatusMode.Text = String.Format("{0}", lockStatus.ToString());
et non pas +=
En fait, votre texte doit changer mais et dépasser le cadre d'affichage du label et vous voyez toujours les premières lettres du label, au bout d'un certain temps le label doit contenir ceci:
Locked Unlocked Locked Unlocked Locked Unlocked Locked Unlocked Locked Unlocked Locked Unlocked etc.
Cordialement
Gérard- Modifié GP79 mardi 23 février 2016 21:05
- Marqué comme réponse paintbox00 vendredi 26 janvier 2018 13:59
Toutes les réponses
-
Bonsoir,
Vous devriez essayerstatusMode.Text = String.Format("{0}", lockStatus.ToString());
et non pas +=
En fait, votre texte doit changer mais et dépasser le cadre d'affichage du label et vous voyez toujours les premières lettres du label, au bout d'un certain temps le label doit contenir ceci:
Locked Unlocked Locked Unlocked Locked Unlocked Locked Unlocked Locked Unlocked Locked Unlocked etc.
Cordialement
Gérard- Modifié GP79 mardi 23 février 2016 21:05
- Marqué comme réponse paintbox00 vendredi 26 janvier 2018 13:59
-
-
Bonjour,
En fonction d'où vous faite appel à cette portion de code, vous pourriez avoir éventuellement une erreur de cross-thread (qui empêcherai donc de rafraichir votre label ).
Cela arrive généralement si votre code est situé dans un event mais en général cela fait complètement "planter" l'application.
Pour pallier à ce soucis (dont je doute que c'est votre cas), vous pouvez modifier votre code de la façon suivante :
if(statusMode.InvokeRequired) { statusMode.BeginInvoke((MethodInvoker)delegate(){ statusMode.Text += String.Format("{0}", lockStatus.ToString()); }); } else { statusMode.Text += String.Format("{0}", lockStatus.ToString()); }
Bien à vous,
E. Tourneur