c# - 删除 RichTextBox 中的双换行符到字符串

标签 c# wpf visual-studio xaml

我使用的是 Visual Studio 2015、C#、WPF、XAML。

我将文本从 RichTextBox 复制到 string 并删除所有 LineBreaks

如果您按 Shift+Enter,则会发生 换行。但只要 Enter 就会导致双换行

Double LineBreak 之后的任何文本都会从 TextRange 中截断并复制到字符串

这个Double LineBreak是什么以及如何删除它?

richtextbox linebreak


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 个段落 block ,如下所示:

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

因此,我的假设是,当您重新创建文档并尝试以文本形式检索其内容时,您只保留第一段并丢弃其余部分。

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

相关文章:

c# - 目录概念而不是复杂的构造函数?

c# - 在 Windows 应用商店应用中放大图像

c# - Entity Framework Core 错误在 Class.TempProperty 类型为 'object' 之前未见,当前数据库提供程序不支持

c# - [WPF]如何在 Canvas 上绘制网格?

c# - WPF slider thumb.DragCompleted

visual-studio - Visual Studio 中创建 GUID 工具的目的是什么?

c# - 如何使用 directshow 在多台显示器上同步播放多个视频?

c# - WPF 绑定(bind) : cannot resolve symbol due to unknown datacontext

visual-studio - 安全移动 Microsoft SDKs 文件夹

asp.net - 制作 "build"涉及什么?