代码之家  ›  专栏  ›  技术社区  ›  TheRealLife

文本框。文本换行?[关闭]

  •  0
  • TheRealLife  · 技术社区  · 6 年前

    同样是一个很简单的问题(我想是的),但我不能通过谷歌找到什么。我想我用错了关键词,但我不知道如何正确地用谷歌搜索。

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

    如果从文本框中读取字符串,则输出为:“texta\\ntextb”。 我正在创建一个包含文本框输出的PDF,因此在PDF中,您可以阅读“texta\ntextb”,但没有新行。如果我用“texta\ntextb”创建一个普通字符串。我可以在PDF中看到新行。

    所以基本上问题是: 我需要改变的是,mit输出字符串与输入字符串相同?

    我已经试过了: 文本A\r\ntextb texta'\n'textb texta“\n”textb

    谢谢你

    1 回复  |  直到 6 年前
        1
  •  4
  •   Marc Gravell    6 年前

    (来自评论)

    实际包含斜线n

    它返回92

    (其中“it”是 ...\n... ,所以:斜线)

    如果 目录 是一个斜线和一个N,那么:这不是一个换行符,工具通过将其表示为斜线和N来做正确的事情。 \n 语法仅适用于 C文字 ,作为告诉编译器包含 不是 实际上是一个斜线和一个N。

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

    foo
    bar
    

    (换行)

    然而,一个 一串 包含内容 foo\nbar 包含内容的字符串 :

    foo\nbar
    

    (斜线和N,没有换行)

    为了完整性,还有c# 逐字 字符串文字,表示为 @"foo\nbar" 它也是包含内容的字符串

    foo \n巴
    

    (斜线和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。