摘录的内容
使用SelectionText属性.首先选择要删除的行,然后通过将SelectionText设置为空字符串将其删除.如下:
richTextBox1.SelectionStart = 0;
richTextBox1.SelectionLength = richTextBox1.GetFirstCharIndexFromLine(200);
richTextBox1.SelectedText = "";
这样可以保留所有其他行的格式.这可能会导致UI上出现明显的闪烁,您可以通过将Begin / EndUpdate方法实现为shown here来抑制这种情况.
程序小案例:
private void dowork()
{
//往界面控件在线程里连续写入时,只需要将操作控件部分放到委托this.invoke即可,把
//Thread.Sleep要放到委托外面,Thread.Sleep已经在线程里后,不会阻塞主线程造成界面卡
for (int i = 0;; i++)
{
this.Invoke(new EventHandler(delegate {
richTextBox1.AppendText(i.ToString()+"\r\n");
updataRichText(richTextBox1, 10);
}));
Thread.Sleep(500);
}
}
private void button1_Click(object sender, EventArgs e)
{
Task task = new Task(dowork);
task.Start();
}
private void updataRichText(RichTextBox richTextBox,int maxLinds)
{
if (richTextBox.Lines.Length >= maxLinds)
{
richTextBox1.SelectionStart = 0;
richTextBox1.SelectionLength = richTextBox1.GetFirstCharIndexFromLine(1);
richTextBox1.SelectedText = "";
//下面也是删除某些行的方法,但下面会改变已存在内容的格式
//int moreLines = richTextBox.Lines.Length - maxLinds;
//string[] lines = richTextBox.Lines;
//Array.Copy(lines, moreLines, lines, 0, maxLinds);
//Array.Resize(ref lines, maxLinds);
//richTextBox.Lines = lines;
}
}
补充说明:
1、若要删除某一条信息,以"\n"结尾的,需要把
richTextBox1.SelectionLength = richTextBox1.GetFirstCharIndexFromLine(1);
替换成
richTextBox.SelectionLength = richTextBox.Text.IndexOf("\n") + 1;
2、进行删除一条信息后,光标焦点发生的变化,不在最后一个位置,这时,需要先把光标定位到要插入数据的位置
添加代码
//光标聚焦在最后一行
richTextBox.Select(richTextBox.Text.Length, 0);
richTextBox.ScrollToCaret();
本文详细介绍了一种在C#中使用RichTextBox控件时,如何高效地删除特定行而不影响其他行格式的方法。通过利用SelectionText属性和GetFirstCharIndexFromLine方法,实现了保留原有格式的同时删除指定行。此外,还提供了避免UI闪烁的Begin/EndUpdate方法使用技巧,以及通过Invoke方法在多线程环境下更新界面的示例。
547

被折叠的 条评论
为什么被折叠?



