C#删除RichTextBox行,同时保持C#中剩余行的颜色

本文详细介绍了一种在C#中使用RichTextBox控件时,如何高效地删除特定行而不影响其他行格式的方法。通过利用SelectionText属性和GetFirstCharIndexFromLine方法,实现了保留原有格式的同时删除指定行。此外,还提供了避免UI闪烁的Begin/EndUpdate方法使用技巧,以及通过Invoke方法在多线程环境下更新界面的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘录的内容

使用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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值