none
Updater un StatusLabel RRS feed

  • 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

    mardi 23 février 2016 19:39

Réponses

  • Bonsoir,
    Vous devriez essayer

    statusMode.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
    mardi 23 février 2016 21:04

Toutes les réponses

  • Bonsoir,
    Vous devriez essayer

    statusMode.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
    mardi 23 février 2016 21:04
  • Bonjour GP79,

    merci pour votre aide, mais cela ne change rien. Mon label ne se rafraîchit pas. En mode debug, statusMode.Text a bien la valeur unlocked.

    Je ne sais pas comment forcer le control à se redessiner.

    Encore merci

    mardi 23 février 2016 21:17
  • 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

    vendredi 10 juin 2016 14:38