如何在不移动滚动条/光标的情况下删除RichTextBox的旧数据

时间:2014-05-07 07:21:06

标签: c# .net winforms richtextbox

我为实时日志创建了一个richtexbox。如果richtexbox的长度太大,我将删除旧数据(例如1/3当前数据)。

 Content.Invoke(new EventHandler(delegate
            {
               Content.AppendText(msg);   
                if(Content.Text.Length >100000)
                {
                    Content.Select(0, 50000);
                    Content.SelectedText = "";
                }
            }));

我的问题是每当我删除数据,滚动条上移(选择文本)并向下(添加新文本)。反正有没有阻止滚动条上升?

1 个答案:

答案 0 :(得分:0)

我在计时器中试过这个,看起来很好。删除文本时显然滚动条增长,但这应该发生..

    private void timer1_Tick(object sender, EventArgs e)
    {
        richTextBox1.SuspendLayout();
        richTextBox1.AppendText( richTextBox1.Text.Length.ToString() +
           "  some random text of no consequence.....\n");
        if (richTextBox1.Text.Length > 10000)
        {
            richTextBox1.Select(0, 2000);
            richTextBox1.SelectedText = "";
        }

        richTextBox1.SelectionStart = richTextBox1.Text.Length;
        richTextBox1.SelectionLength = 0;
        richTextBox1.ScrollToCaret();
        richTextBox1.ResumeLayout();
    }

我认为你总是希望RTB的末端可见,所以你必须把插入物放到最后并且看得见。如果你不这样做,删除文本的顶部后,插入符将位于顶部.. 无需存储插入符号位置,除非您希望它保留在其他位置,可能是因为用户已将其放在那里..?但是,在这种情况下,您必须采取相应行动并计算正确的位置!