我想用来自Resources的带有换行符的字符串显示MessageBox(WinForms)。
示例没有资源(WORKS):
string someMsg = "Message. Details:\n" + someDetails;
MessageBox.Show(someMsg);
结果:
信息。详细说明:
这里有一些细节
当我将字符串“消息。详细信息:\ n”移动到参考资料中时:
string someMsg = GlobalStrings.MsgBoxJustTest + someDetails;
MessageBox.Show(someMsg);
结果:
信息。细节:\有一些细节
当我将带有“\ n”的字符串移动到资源时,MessageBox.Show()停止将其解释为换行符。
编辑:我在想:someMsg.Replace(@'\ n',Environment.NewLine); 但对于这么简单的事情来说,它仍然很烦人。
答案 0 :(得分:10)
如果将其添加到资源,则不会将\ n作为转义字符 只需在记事本中打开资源文件即可查看此文件并在XML文件(resx)中进行cahnge
或
使用新行在记事本中输入数据。 复制并粘贴到资源编辑器中
编辑:
或
将数据输入/粘贴到资源编辑器用户界面中,选择\ n并将其替换为实际换行符Shift-Enter
。
答案 1 :(得分:1)
您可以执行以下操作(只要不 .net 2.0):
public static class StringExt
{
public static String FixNewLines(this String str)
{
return str.Replace(@'\n',Environment.NewLine);
}
}
然后:
string someMsg = GlobalStrings.MsgBoxJustTest + someDetails;
MessageBox.Show(someMsg.FixNewLines());
但是,这会影响应用程序中的 ALL 字符串(命名空间范围)
这是一个肮脏的修复,但它是一个快速修复。
就个人而言,我只会修复我的逻辑,而不是像上面那样做。
答案 2 :(得分:0)
也许您可以将resx文件作为代码打开并直接在中添加换行符 XML
OR
可能他们在阅读时会因为逃脱而迷路,可能会尝试使用\\
答案 3 :(得分:0)
一个简单的解决方案是将“占位符”存储在资源字符串中。对于instane,此字符串存储在* .resx下的“MessageDetails”键下:“Message.F Details:{0} {1}”。然后,在您的代码中,使用它:
MessageBox.Show(String.Format(GlobalStrings.MessageDetails,Environment.NewLine,@“The message”));
这里的优点是可移植性,如您所见。