状态条标签中的 String.format() 值在 Win 7 和 Win XP 上显示不同

Posted

技术标签:

【中文标题】状态条标签中的 String.format() 值在 Win 7 和 Win XP 上显示不同【英文标题】:String.format() value in statusstrip label displayed differently on Win 7 vs Win XP 【发布时间】:2012-02-04 08:28:25 【问题描述】:

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

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:

Windows 7

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

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

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

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

【问题讨论】:

你确定相同的代码在两个操作系统上运行吗? 每个系统的“小数点后位数”的“数字”附加设置是什么? 我要在这里冒个险,我猜你没有向我们展示将文本分配给 TimingLabel 所涉及的所有代码。 您使用的是哪个版本的 .NET?是否有可能您已经为 3.5 编译并且一台机器具有 .NET 4 而另一台机器没有?尝试使用您的应用配置文件强制运行时。 绝对是的!这是我检查的第一件事。 Windows XP 映像取自开发机器,Windows 7 映像取自我安装应用程序的测试机器。 【参考方案1】:

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

更有可能是由于容器布局约束中的错误导致数字被剪裁。如果我仔细查看屏幕截图,ms 字符串的左侧似乎确实有一个分隔线。

尝试为所有内容设置一个相当大的固定宽度,看看是否能恢复正确的显示。

【讨论】:

这是一个布局错误。当我使标签固定宽度时,值的格式正确。 @Gary:那么编辑你的问题的标题不是很好吗?【参考方案2】:

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

【讨论】:

以上是关于状态条标签中的 String.format() 值在 Win 7 和 Win XP 上显示不同的主要内容,如果未能解决你的问题,请参考以下文章

string.format 与 css 标签冲突: 的

String.format与手机设置的语言环境的关系导致语言转换系统无法识别闪退问题

String.format与手机设置的语言环境的关系导致语言转换系统无法识别闪退问题

Java 中的 String.format() 和十六进制数字

String.format()的用法

为chart.js中的水平条添加值