【问题标题】:New line is not working in MessageBox in C#/WPF新行在 C#/WPF 的 MessageBox 中不起作用
【发布时间】:2014-03-14 10:29:45
【问题描述】:

小问题:我的资源中有一个字符串:“这是我的测试字符串 {0}\n\nTest”

我正在尝试在我的消息框中显示此字符串:

MessageBox.Show(String.Format(Properties.Resources.About, 
    Constants.VERSION), 
    Properties.Resources.About_Title, MessageBoxButton.OK, 
    MessageBoxImage.Information);

但是我没有换行。 \n 仍然显示为字符,而不是换行符。

我也尝试使用 mystring.Replace("\n", Environment.NewLine) 之类的解决方法,但这也没有任何改变。

我做错了什么?

编辑:有趣的事情是:Replace("\n", "somethingelse") 不会改变任何东西。

Edit2:在我的资源文件中使用 Shift+Enter 而不是 \n 似乎可以工作......无论如何都有奇怪的行为

【问题讨论】:

  • 很遗憾没有。它以纯文本形式显示 \r\n
  • 这很有趣..当我通过分配给变量来使用 OP 的字符串时它可以工作..但是当我将它放在资源中时它不起作用。
  • 您的资源文件是 ResX 格式吗?你是用 VS resx 编辑器添加资源字符串的吗?
  • Environment.NewLine 在 Windows 上运行时将给出“\r\n”。如果要为基于 Unix 的环境生成字符串,则不需要 "\r"
  • 当从字符串表中读取字符串时 '\r\n' 变为 '\\r\\n' 这就是为什么 shift+enter 不起作用 \r\n

标签: c# wpf messagebox


【解决方案1】:

在您要换行的地方放置一个占位符,在您使用该资源字符串的代码中,只需将其替换为新行:string resource: "This is first line.{0}This is second line.{ 0}这是第三行。”您将像这样使用此资源字符串:MessageBox.Show(string.Format(MyStringResourceClass.MyStringPropertyName, Environment.NewLine));

非常规方法 但我刚刚通过直接(或任何其他地方)从 word 中处理换行符并将其粘贴到资源字符串文件中来使其工作。

It was simple..
OR

\r\n 字符在使用消息框显示或分配给文本框或在界面中使用时将转换为新行。

在 C# 中(与大多数 C 派生语言一样),转义字符用于表示特殊字符,例如回车和制表符,并且使用 + 代替 & 用于字符串连接。

要使您的代码在 C# 下工作,您有两个选择...第一个是简单地将 NewLine 替换为返回转义字符 \n ala:

MessageBox.Show("this is first line" + "\n" + "this is second line");

另一种更正确的方法是用 Environment.NewLine 代替它,理论上它可能会根据您使用的系统而改变(但不太可能)。

MessageBox.Show("this is first line" + Environment.NewLine + "this is second line");

【讨论】:

  • 这根本没有回答问题? OP 已经在使用 \n 但询问为什么按原样输出而不是显示换行符。
  • 在你的情况下 MessageBox.Show("This is my test string {0}"+"\n"+"\n"+"Test");
  • 但是我怎样才能在我的资源范围内做到这一点?我想将整个字符串保存在资源中
  • 我认为"Environment.NewLine"之间不应该是引号。
  • 问题是我不能拆分我的字符串。我只想用换行符从我的资源中加载字符串。
【解决方案2】:

在资源编辑器中,使用 shift+enter 分隔字符串内容。或者,在 xml 编辑器中编辑您的 ResX 文件并使用输入键为您的资源字符串创建一个新行。

详细信息请参考此链接:Carriage Return/Line in ResX file.

【讨论】:

  • 确实 shift+enter 是最简单的方法!
【解决方案3】:

试试这个:

    String outputMessage = string.Format("Line 1{0}Line 2{0}Line 3", Environment.NewLine);
    MessageBox.Show(outputMessage);

另一个变量的例子:

    String anotherValue = "Line 4";
    String outputMessage = string.Format("Line 1{0}Line 2{0}Line 3{0}{1}", Environment.NewLine, anotherValue);
    MessageBox.Show(outputMessage);

【讨论】:

  • 添加MessageBoxButtons.YesNoCancel 然后它不会断行...
【解决方案4】:

试试这个

删除 MessageBoxButtons.OK 和 MessageBoxImage。信息。

 MessageBox.Show(String.Format(Properties.Resources.About, 
Constants.VERSION), 
Properties.Resources.About_Title);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多