我使用的是 Visual Studio 2015、C#、WPF、XAML。
我将文本从 RichTextBox
复制到 string
并删除所有 LineBreaks
。
如果您按 Shift
+Enter
,则会发生 换行
。但只要 Enter
就会导致双换行
。
Double LineBreak
之后的任何文本都会从 TextRange
中截断并复制到字符串
。
这个Double 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/