2012-01-06 11 views
13

Estoy usando el siguiente código para mostrar el tiempo transcurrido de una tarea en la barra de estado en mi aplicación.String.format() valor en la etiqueta statusstrip se muestra de forma diferente en 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 es una etiqueta en el control StatusStrip en el pie de la WinForm.

Pero consigo resultados completamente diferentes en Windows XP vs Windows 7

Windows XP: elapsed Time formatted XP

de Windows 7 elapsed Time formatted 7

¿Por qué las unidades que aparecen antes de la hora en Windows 7?

He comprobado la configuración regional ambas máquinas están configuradas en EE. UU. Con el mismo formato de fecha y hora. Asegúrese de que sea el mismo código que se ejecuta en ambas máquinas. Este es un comportamiento muy extraño en un código muy simple.

Como seguimiento: Me hizo el siguiente cambio en mi código, pero todavía tiene el mismo problema:

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

¿Está absolutamente seguro de que el mismo código se está ejecutando en ambos sistemas operativos? – FishBasketGordo

+0

¿Qué establece la configuración adicional para "Números" para "Número de dígitos después del decimal" para cada sistema? – Oded

+0

Voy a salir de una extremidad aquí y supongo que no nos está mostrando todo el código involucrado en la asignación de texto a 'TimingLabel'. – Jamiec

Respuesta

7

Creo que lo más probable es probable que aquí es una cuestión de diseño y no String.Format. La configuración regional no debería ser un factor aquí porque no le está pidiendo al TimeSpan que formatee su valor. En su lugar, está pidiendo String para formatear una cadena "ms" seguida de un número. Sería simplemente un error si los invirtiera en la salida.

Lo que es mucho más probable es que el número se recorta a través de un error en las restricciones de diseño del contenedor. Si observo con mucha atención la captura de pantalla, parece que hay un divisor inmediatamente a la izquierda de la cadena ms.

Intente dar a todo un ancho fijo que sea bastante grande y ver si vuelve la pantalla correcta.

+0

Buena sugerencia. –

+1

Es un error de diseño. Cuando hago que las etiquetas sean de ancho fijo, el valor se formatea correctamente. –

+0

@Gary: ¿No sería bueno editar el título de su pregunta, entonces? – GaussZ

0

La respuesta real fue la etiqueta en el estado tenía su RightToLeft incorrectamente establecido en verdadero. Esta propiedad no fue respetada por Windows XP pero se usa Windows 7+.

Cuestiones relacionadas