考虑一个RichTextBox,它具有400行,并且包含许多不同颜色的单词和行。删除RichTextBox行,同时保持C#中剩余行的颜色
是否可以删除此文本框的前100行,而剩余单词的颜色是保留的。目前,我正在使用下面的代码删除线条,但它不能保持颜色。
if (rtb.Lines.Count() > 400)
rtb.Lines = rtb.Lines.Skip(100).ToArray();
考虑一个RichTextBox,它具有400行,并且包含许多不同颜色的单词和行。删除RichTextBox行,同时保持C#中剩余行的颜色
是否可以删除此文本框的前100行,而剩余单词的颜色是保留的。目前,我正在使用下面的代码删除线条,但它不能保持颜色。
if (rtb.Lines.Count() > 400)
rtb.Lines = rtb.Lines.Skip(100).ToArray();
使用SelectionText属性。首先选择要删除的行,然后通过将SelectionText设置为空字符串来删除它们。像这样:
richTextBox1.SelectionStart = 0;
richTextBox1.SelectionLength = richTextBox1.GetFirstCharIndexFromLine(200);
richTextBox1.SelectedText = "";
这保留了所有其他行的格式。这可能会导致UI上出现可见的闪烁,您可以通过将开始/结束更新方法实施为shown here来抑制该闪烁。
如果要保留格式设置,则不能使用Lines
属性。 Lines
源自TextBoxBase。您需要使用Rtf属性,并在您回来的字符串中解析自己的行。如果你想刚才得到的行数,然后解析RTF,那么你可以这样做:
// NOTE: I am using Length rather than Count() because the array already knows its length
if (rtb.Lines.Length > 400)
{
// Parse the rtf here to remove the unwanted lines and preserve the format
}
您需要看RTF specification准确地拉出实际线。换行符由标签\par
表示。该行处理起来会非常棘手,因为它可能在实际的第一行文本之前包含额外的信息。
.SelectedText =“我的应用”抛出一个Windows丁
于是我找到了第二个解决方案是.Lines财产发挥
if (nbLines > maxLines)
{
Array.Copy(rtfBox.Lines, 1,
rtfBox.Lines, 0, rtfBox.Lines.Length - 1);
}
是高贵和简洁的方式比更好的解析RTF。奖励! – pstrjds
此解决方案的工作原理是将richTextBox1.ReadOnly设置为false。如果没有,它什么都不做。 –