c# - Textbox.Text 换行?
问题描述
又是一个非常简单的问题(我想是这样),但我无法通过谷歌找到一些东西。我认为我使用了错误的关键字,但我不知道如何正确地用谷歌搜索它。
所以我想做的是:我有一个文本框(只是一个普通的文本框而不是一个富文本框),输入文本来自数据库。示例字符串:“TextA \nTextB”
如果我从文本框中读出字符串,则输出为:“TextA \\nTextB”。我正在使用文本框的输出创建一个 pdf,因此实际上在 pdf 中您可以阅读“TextA \nTextB”,但没有新行。如果我用“TextA \nTextB”创建一个普通字符串。我可以在 pdf 中看到新行。
所以基本上问题是:我必须改变什么,mit输出字符串与输入字符串相同?
我已经尝试过: TextA \r\nTextB TextA'\n'TextB TextA"\n"TextB
谢谢
解决方案
(来自评论)
实际上它包含一个斜杠 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。
推荐阅读
- sql - 如何在 SQL Server 中对整个表设置全局排他锁?
- graphql - 基于嵌套对象过滤查询
- node.js - 使用 axios 将多部分文件上传到 Shopify s3 存储桶错误 - 提供 Content-Length HTTP 标头错误
- javascript - 有条件地替换为计算
- python - 从 pandas `dataframe` 创建从到对
- reactjs - 在 redux reducer 与中间件中过滤状态数组
- javascript - 如何在 React JS 中 60 秒后更改 css 类
- flutter - 不能分配给参数类型“字符串”,因为“字符串?” 可以为空,而 'String' 不是。
- javascript - 如何自定义 Dropzone js?
- c++ - 文件没有被正确接收?