Подтвердить что ты не робот

Значение String.format() в ярлыке statusstrip отображается по-разному на 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 - это метка в элементе управления statusStrip в нижнем колонтитуле winform.

Но я получаю совершенно разные результаты в Windows XP и Windows 7

Windows XP: elapsed Time formatted XP

Windows 7 elapsed Time formatted 7

Почему устройства появляются раньше времени в Windows 7?

Я проверил региональные настройки, и обе машины установлены в США с одинаковым форматированием даты. Совершенно уверен, что это тот же код, который работает на обеих машинах. Это очень странное поведение в очень простом коде.

В качестве продолжения: я внесла следующее изменение в мой код, но все еще имею ту же проблему:

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

Ответ 1

Я думаю, что скорее всего, вероятно, это проблема макета, а не String.Format. Региональные настройки не должны быть фактором здесь, потому что вы не просите TimeSpan отформатировать его значение. Вместо этого вы просите String отформатировать строку ms, за которой следует число. Это было бы просто ошибкой, если бы она инвертировала их на выходе.

Скорее всего, что число обрезается с помощью ошибки в ограничениях макета контейнера. Если я очень сильно смотрю на экран, то кажется, что он находится слева от строки ms.

Попробуйте дать все фиксированную ширину, которая довольно велика, и посмотрите, вернется ли правильный дисплей.

Ответ 2

Фактическим ответом была метка в статусе, в которой RightToLeft неправильно установил значение true. Это свойство не соблюдалось Windows XP, но используется Windows 7 +.