我正在使用Visual Studio 2015,C#,WPF,XAML。
我将文本从RichTextBox
复制到string
,然后删除所有LineBreaks
。
如果按LineBreak
+ Shift
,则会出现Enter
。但是仅Enter
会导致Double LineBreak
。Double LineBreak
之后的所有文本都将从TextRange
截断并复制到string
。
这是什么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个段落块,如下所示:
第1段:“你好,世界。”
第2段:“这是一个测试。示例。”
因此,我的假设是,当您重新创建一个文档以尝试将其内容作为文本检索时,您仅保留第一段,其余部分就丢弃了。
关于c# - 从RichTextBox删除Double LineBreak到字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45315345/