Значение String.format () в метке statusstrip отображается по-разному в Win 7 и Win XP - PullRequest
13 голосов
/ 06 января 2012

Я использую следующий код для отображения прошедшего времени задачи в строке состояния в моем приложении.

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()); 

Ответы [ 2 ]

7 голосов
/ 06 января 2012

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

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

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

0 голосов
/ 28 февраля 2016

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

...