statusstrip标签中的String.format()值在Win 7与Win XP上的显示方式不同

Gar*_*del 13 c# windows-xp string-formatting windows-7

我使用以下代码在我的应用程序的状态栏中显示任务的已用时间.

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;
}
Run Code Online (Sandbox Code Playgroud)

this.TimingLabel是winform页脚中statusStrip控件中的标签.

但是我在Windows XP和Windows 7上得到了完全不同的结果

Windows XP: 已过时格式化XP

Windows 7的 已过时间格式化7

为什么单位出现在Windows 7之前?

我已检查区域设置两台计算机都设置为美国,具有相同的日期时间格式.非常确定它是在两台机器上运行的相同代码.在一些非常简单的代码中,这是非常奇怪的行为.

作为后续跟进:我对我的代码进行了以下更改,但仍然存在同样的问题:

formattedDuration = string.Format("{0} ms", duration.TotalMilliseconds.ToString()); 
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 7

我认为最有可能的是布局问题,而不是String.Format.区域设置不应该是一个因素,因为您没有要求TimeSpan格式化其值.相反,你要求String格式化字符串"ms"后跟一个数字.如果它在输出中反转它将只是一个错误.

更有可能的是,该数字是通过容器布局约束中的错误进行修剪的.如果我在屏幕截图上看起来非常努力,那么ms字符串左边似乎会有一个分隔线.

尝试给所有东西一个相当大的固定宽度,看看是否有正确的显示.