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

时间:2012-01-06 16:06:23

标签: c# windows-7 windows-xp string-formatting

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

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是winform页脚中statusStrip控件中的标签。

但是我在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 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:0)

实际答案是状态中的标签将RightToLeft错误地设置为true。 Windows XP不支持此属性,但使用的是Windows 7 +。