我正在使用Visual Studio 2015,C#,WPF,XAML。

我将文本从RichTextBox复制到string,然后删除所有LineBreaks

如果按LineBreak + Shift,则会出现Enter。但是仅Enter会导致Double LineBreak

Double LineBreak之后的所有文本都将从TextRange截断并复制到string

这是什么Double LineBreak,该如何删除?

c# - 从RichTextBox删除Double LineBreak到字符串-LMLPHP



XAML

<RichTextBox x:Name="rtbMessage" Margin="10,10,10,50" />




C#

Paragraph p = new Paragraph();

// Get RichTextBox TextRange Method
//
public String MessageRichTextBox()
{
    rtbMessage.Document = new FlowDocument(p);

    TextRange textRange = new TextRange(
        rtbMessage.Document.ContentStart,
        rtbMessage.Document.ContentEnd
    );

    return textRange.Text;
}


// RichTextBox to String
// Remove LineBreaks
//
string message = MessageRichTextBox().Replace(Environment.NewLine, "");




我曾尝试移除:

https://stackoverflow.com/a/6750310/6806643

Regex.Replace(MessageRichTextBox(), @"[\u000A\u000B\u000C\u000D\u2028\u2029\u0085]+", string.Empty);

.Replace(Environment.NewLine, "")
.Replace("\n", "")
.Replace("\r\n", "")
.Replace("\u2028", "")
.Replace("\u000A", "")
.Replace("\u000B", "")
.Replace("\u000C", "")
.Replace("\u000D", "")
.Replace("\u0085", "")
.Replace("\u2028", "")
.Replace("\u2029", "")

最佳答案

当您检索这样的RichTextBox文本时

public String MessageRichTextBox()
{
    rtbMessage.Document = new FlowDocument(p);
    TextRange textRange = new TextRange(
        rtbMessage.Document.ContentStart,
        rtbMessage.Document.ContentEnd
    );
    return textRange.Text;
}


您修改rtbMessage的内容,因此您得到了错误的内容。我假设您以某种方式引用了p中文档的第一段并将文档截断到此处的第一段。尝试删除rtbMessage.Document = new FlowDocument(p);行,看看它是否对您有用?

用户按下Enter键时,不会插入双LineBreak,但是会创建一个新的Paragraph。您可以通过尝试将插入号放置在此处的空行中来进行验证-如果它是双行中断,则应该有一个空行,并且可以将插入号放置在其上。

无论如何,您的屏幕截图上的文档应具有2个段落块,如下所示:


第1段:“你好,世界。”
第2段:“这是一个测试。示例。”


因此,我的假设是,当您重新创建一个文档以尝试将其内容作为文本检索时,您仅保留第一段,其余部分就丢弃了。

关于c# - 从RichTextBox删除Double LineBreak到字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45315345/

10-10 21:53