2012-01-06 3 views
13

J'utilise le code suivant pour afficher le temps écoulé d'une tâche dans la barre d'état de mon application.Valeur String.format() dans l'étiquette statusstrip affichée différemment sur Win 7 vs Win XP

public void DisplayDuration(TimeSpan duration) 
{ 
    string formattedDuration; 

    if (duration.TotalMilliseconds < 2000) 
     formattedDuration = string.Format("{0} ms", duration.TotalMilliseconds); 
    else if (duration.TotalSeconds < 60) 
     formattedDuration = string.Format("{0} sec", duration.TotalSeconds); 
    else 
     formattedDuration = string.Format("{0} min", duration.TotalMinutes); 

    this.TimingLabel.Text = formattedDuration; 
} 

this.TimingLabel est une étiquette dans le contrôle StatusStrip dans le pied de la WinForm.

Mais je reçois complètement différents résultats sur Windows XP vs Windows 7

Windows XP: elapsed Time formatted XP

de Windows 7 elapsed Time formatted 7

Pourquoi les unités qui apparaissent avant l'heure dans Windows 7?

J'ai coché les paramètres régionaux les deux machines sont définies sur US avec le même format de date et heure. Assurez-vous que le même code s'exécute sur les deux machines. C'est un comportement très étrange dans un code très simple.

En guise de suivi: Je fait les modifications suivantes à mon code, mais toujours le même problème:

formattedDuration = string.Format("{0} ms", duration.TotalMilliseconds.ToString()); 
+0

Etes-vous absolument sûr que le même code s'exécute sur les deux systèmes d'exploitation? – FishBasketGordo

+0

Quels sont les paramètres supplémentaires pour "Numéros" définis pour "Nombre de chiffres après décimales" pour chaque système? – Oded

+0

Je vais aller sur un membre ici et devinez que vous ne nous montrez pas tout le code impliqué dans l'attribution de texte à 'TimingLabel'. – Jamiec

Répondre

7

Je pense que le plus probable est sans doute ici un problème de mise en page et non String.Format. Les paramètres régionaux ne doivent pas être un facteur ici car vous ne demandez pas au TimeSpan de formater sa valeur. Au lieu de cela, vous demandez String pour formater une chaîne "ms" suivie d'un nombre. Ce serait simplement un bug s'il les inversait dans la sortie.

Ce qui est beaucoup plus probable est que le nombre est en train d'être coupé par un bogue dans les contraintes de disposition du conteneur. Si je regarde très fort la capture d'écran, il semble y avoir un diviseur immédiatement à gauche de la chaîne ms. Essayez de tout donner une largeur fixe qui est assez grande et voyez si l'affichage correct revient.

+0

Bonne suggestion. –

+1

Il s'agit d'une erreur de mise en page. Lorsque je redimensionne les étiquettes, la valeur est correctement formatée. –

+0

@Gary: Ne serait-il pas bon d'éditer le titre de votre question alors? – GaussZ

0

La réponse réelle était l'étiquette dans le statut avait son RightToLeft incorrectement défini sur true. Cette propriété n'a pas été respectée par Windows XP mais est utilisée sous Windows 7+.