2012-01-06 15 views
13

Sto usando il seguente codice per visualizzare il tempo trascorso di un'attività nella barra di stato nella mia applicazione.Valore String.format() nell'etichetta statusstrip visualizzata in modo diverso su 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 è un'etichetta nel controllo StatusStrip nel piè del winform.

Ma ottengo risultati completamente differenti su Windows XP vs Windows 7

Windows XP: elapsed Time formatted XP

di Windows 7 elapsed Time formatted 7

Perché le unità indicate la prima volta in Windows 7?

Ho verificato le Impostazioni internazionali entrambe le macchine sono impostate su Stati Uniti con la stessa formattazione Date Time. Assicurarsi che sia lo stesso codice in esecuzione su entrambe le macchine. Questo è un comportamento molto strano in un codice molto semplice.

Come un follow-up: ho fatto la seguente modifica al mio codice, ma hanno ancora lo stesso problema:

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

Sei assolutamente sicuro che lo stesso codice sia in esecuzione su entrambi i sistemi operativi? – FishBasketGordo

+0

Cosa impostano le impostazioni aggiuntive per "Numeri" per "Numero di cifre dopo il decimale" per ciascun sistema? – Oded

+0

Ho intenzione di uscire su un arto qui e suppongo che tu non ci mostri tutto il codice coinvolto nell'assegnazione del testo a "TimingLabel". – Jamiec

risposta

7

penso che il più probabile probabilmente qui è una questione di layout e non String.Format. Le impostazioni regionali non dovrebbero essere un fattore qui perché non stai chiedendo allo TimeSpan di formattare il suo valore. Invece stai chiedendo String per formattare una stringa "ms" seguita da un numero. Sarebbe semplicemente un bug se li invertisse nell'output.

Ciò che è molto più probabile è che il numero venga ritagliato tramite un bug nei vincoli di layout del contenitore. Se osservo con molta attenzione la schermata, sembra che ci sia un divisore immediatamente a sinistra della stringa ms.

Provare a dare a tutto una larghezza fissa che è abbastanza grande e vedere se ritorna il display corretto.

+0

Buon consiglio. –

+1

Si tratta di un errore di layout. Quando creo le etichette a larghezza fissa, il valore è formattato correttamente. –

+0

@Gary: Non sarebbe bello modificare il titolo della tua domanda, allora? – GaussZ

0

La risposta effettiva era l'etichetta nello stato se RightToLeft era impostato correttamente su true. Questa proprietà non è stata rispettata da Windows XP ma viene utilizzata con Windows 7 o versioni successive.

Problemi correlati