如何在文本框中使用换行符\n

25

我正在开发一个程序,使用一个字符串(generatedCode),其中包含一些\n以在我使用的文本框(textBox1.Text = generatedCode)中换行,但是当我运行程序时,它并没有换行,而是显示了一个方块。

请记住,我已经将文本框的Multiline值设置为True

4个回答

55

将 \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中看到过极其错误的例子,文档也没有说明应该使用哪个选项。

在理想的世界里,我们只需要一种换行符——甚至在第二好的情况下,每种情况都会清楚地定义它所期望的换行符...


2
基本上是一样的东西,但我认为使用 Environment.NewLine 而不是 \r\n 更安全。 - jean
嗯,问题是"\r\n"应该改成System.Environment.NewLine吗?我知道它们差不多,但更多的是一种编码标准类型的问题。 - Murph
鉴于“.NET”并不意味着“Windows”,我强烈赞同使用System.Environment.NewLine - qid
这完全取决于其他平台对Windows Forms控件的决定。考虑到它们是Windows Forms控件,它们很可能会复制使用"\r\n"。老实说,对于这个问题,Mono似乎陷入了进退两难的境地。例如,我肯定会在编写文本文件时使用Environment.NewLine,但对于WinForms GUIs,我不太确定。注意:我实际上不知道Mono在Linux上如何处理这个问题。 - Jon Skeet

10

由于使用 \n 对眼睛更加友好(特别是在格式化文本时),而且有时你无法控制源字符串的构造方式,我认为最佳实践是使用以下代码:
TextBox1.Text = str.Replace("\r\n", "\n").Replace("\n", Environment.NewLine);


s = s.Replace("\r", "").Replace("\n", Environment.NewLine); 可以翻译为:s = s.Replace("\r", "").Replace("\n", Environment.NewLine); - Sasha Bond
@SashaBond 在我看来好多了。消除了\r单独存在的边缘情况,同时也很好地处理了\n。 - Zintom
那是一个老旧的线程...无论如何 - \n和\r\n存在并混合在各个地方...如果只有\r,可能是故意的,因为我所知道的系统都不使用回车符来表示换行。除非我有上下文并且知道它们可能存在并且确实表示换行,否则我会将孤立的'\r'保留在原处。 - dancer42

6
通常在文本框中使用\r\n来换行。尝试用\r\n替换你的\n,但要小心不要混合使用\r\n\n

好的,确保执行textBox1.Text = generatedCode.Replace("\r\n", "\n");以获取任何现有的内容,然后执行textBox1.Text = generatedCode.Replace("\n", "\r\n"); Winform仍然很棒! - Rocklands.Cave

4

添加换行符(\r),它就可以工作了:

TextBox1.Text = "First line\r\nSecond line";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接