首页 > 解决方案 > Textbox.Text 换行?

问题描述

又是一个非常简单的问题(我想是这样),但我无法通过谷歌找到一些东西。我认为我使用了错误的关键字,但我不知道如何正确地用谷歌搜索它。

所以我想做的是:我有一个文本框(只是一个普通的文本框而不是一个富文本框),输入文本来自数据库。示例字符串:“TextA \nTextB”

如果我从文本框中读出字符串,则输出为:“TextA \\nTextB”。我正在使用文本框的输出创建一个 pdf,因此实际上在 pdf 中您可以阅读“TextA \nTextB”,但没有新行。如果我用“TextA \nTextB”创建一个普通字符串。我可以在 pdf 中看到新行。

所以基本上问题是:我必须改变什么,mit输出字符串与输入字符串相同?

我已经尝试过: TextA \r\nTextB TextA'\n'TextB TextA"\n"TextB

谢谢

标签: c#stringnewline

解决方案


(来自评论)

实际上它包含一个斜杠 n

它返回一个 92

(其中“it”是 索引处的字符代码...\n...,因此:斜杠)

如果内容是斜线和 n,则: 那不是换行符,并且工具通过将其表示为斜线和 n 来做正确的事情。该\n语法仅适用于C# 文字,作为告诉编译器包含实际上不是斜杠和 n 的内容的一种方式。

AC# 文字表示为"foo\nbar"包含内容的字符串:

foo
bar

(换行符)

但是,带有内容的字符串是带有内容foo\nbar字符串

foo\nbar

(一个斜线和一个 n,没有换行符)

为了完整起见,还有 C#逐字字符串文字,表示为@"foo\nbar"它也是带有内容的字符串

foo\nbar

(一个斜线和一个 n,没有换行符)

当您string从数据库加载一个值时,您并没有使用 C# 文字 - 您只是在处理字符串。所以一个斜线和一个 n 的意思是:一个斜线和一个 n。不是换行符。

所以:如果可能的话,存储你真正的意思。数据库中的文本应包含换行符,而不是斜杠和 n。如果换行符在您这样做时没有显示为换行符select TheValue from TheTable,则它没有正确存储。

如果这不是一个选项,您将不得不使用某种文本替换(也许.Replace(@"\r\n","\r\n").Replace(@"\n", "\n").Replace(@"\r", "\r")),但您需要考虑误报,特别是如果您的上下文可以包含代码示例之类的内容,即斜杠后跟 n可能看起来意味着斜线后跟 n。


就 SQL 文字而言;如果您想在 SQL 中执行此操作,SQL 文字直接允许换行,因此:

declare @someString nvarchar(200) = N'foo
bar'; -- this contains a newline

(尽管它是否包含 CR、LF、CRLF 或 LFCR 可能取决于您的编辑器的行尾)

但是,通常您会通过 SQL 参数填充值,即

cmd.CommandText = "... @val ..."; // some SQL
cmd.Parameters.AddWithValue("@val", someStringThatHasNewlines);
cmd.ExecuteNonQuery();

其中someStringThatHasNewlines 包含换行符(ASCII 10/13),而不是斜杠+n。


推荐阅读