C# statusstrip标签中的String.format()值在Win 7和Win XP上的显示方式不同
我使用以下代码在我的应用程序的状态栏中显示任务的运行时间C# statusstrip标签中的String.format()值在Win 7和Win XP上的显示方式不同,c#,windows-7,windows-xp,string-formatting,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 (d
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;
}
我认为最有可能的问题是布局问题,而不是
String.Format
。区域设置不应成为此处的一个因素,因为您没有要求TimeSpan
设置其值的格式。相反,您要求String
格式化一个字符串“ms”,后跟一个数字。如果它在输出中反转它们,那将只是一个bug
更有可能的是,这个数字是通过容器的布局约束中的一个bug被截取的。如果我仔细看屏幕截图,ms
字符串的左侧确实出现了一个分隔符
试着给每样东西一个相当大的固定宽度,看看是否能恢复正确的显示 实际答案是状态为RightToLeft的标签未正确设置为true。Windows XP不尊重此属性,但Windows 7+使用此属性。您绝对确定两个操作系统上运行的代码相同吗?为“小数点后的位数”设置的“数字”附加设置是什么对于每个系统?我将在这里冒险,猜测您没有向我们展示将文本分配给
TimingLabel
所涉及的所有代码。您使用的是什么版本的.NET?是否可能您已经编译了3.5版本,一台机器有.NET4,而另一台没有?尝试使用应用程序配置文件强制运行时。绝对是!这是我检查的第一件事。Windows XP映像取自开发机器,Windows 7映像取自安装应用程序的测试机器。这是一个布局错误。当我将标签设置为固定宽度时,值的格式是正确的。@加里:那么编辑问题的标题不是很好吗?
formattedDuration = string.Format("{0} ms", duration.TotalMilliseconds.ToString());