我正在开发一个程序,使用一个字符串(generatedCode
),其中包含一些\n
以在我使用的文本框(textBox1.Text = generatedCode
)中换行,但是当我运行程序时,它并没有换行,而是显示了一个方块。
请记住,我已经将文本框的Multiline
值设置为True
。
将 \n 替换为 \r\n - 这是 Windows 控制符代表换行的方式(但请参考底部注释):
textBox1.Text = generatedCode.Replace("\n", "\r\n");
或者textBox1.Text = generatedCode.Replace("\n", Environment.NewLine);
注意:如评论中所讨论的,您可能想要使用Environment.NewLine
。然而这并不清楚——在非Windows系统上运行时,Windows Forms控件应该使用哪种换行符是不明确的。它们应该使用平台默认值还是Windows默认值(因为它是Windows GUI控件的一个移植)?MSDN中的一个例子确实使用了Environment.NewLine
,但我以前在MSDN中看到过极其错误的例子,文档也没有说明应该使用哪个选项。
在理想的世界里,我们只需要一种换行符——甚至在第二好的情况下,每种情况都会清楚地定义它所期望的换行符...
由于使用 \n 对眼睛更加友好(特别是在格式化文本时),而且有时你无法控制源字符串的构造方式,我认为最佳实践是使用以下代码:
TextBox1.Text = str.Replace("\r\n", "\n").Replace("\n", Environment.NewLine);
\r\n
来换行。尝试用\r\n
替换你的\n
,但要小心不要混合使用\r\n
和\n
。添加换行符(\r),它就可以工作了:
TextBox1.Text = "First line\r\nSecond line";
System.Environment.NewLine
。 - qidEnvironment.NewLine
,但对于WinForms GUIs,我不太确定。注意:我实际上不知道Mono在Linux上如何处理这个问题。 - Jon Skeet