在RichTextBox中居中(垂直)一行文本

时间:2013-06-10 18:28:44

标签: c# scroll richtextbox

我有一个RichTextBox,有时包含大量需要滚动才能看到所有文本的文本。加载/输入文本并单击按钮后,应用程序逐步执行文本,一次一个字符,进行更改。

我正在尝试滚动RichTextBox的内容,以保持当前正在进行更改的行在框的中间。

我可以将插入符号移动到顶部,然后移动到底部,将文本向下移动并将插入符号放在框的顶部或将其向上移动并将插入符号分别放在框的底部。

我可以将插入符号放在给定的字符上但是根据文本的可见部分(文本框内)中字符所在的位置,插入符号可能位于框顶部或靠近底部的位置,如何如何移动整个文本以使插入符号所在的行滚动到框的垂直中间?

希望所有这些都有意义。

1 个答案:

答案 0 :(得分:0)

要模拟“改变”,我只是一次移动一个角色,突出显示灰色文本。

您必须根据UI(即richtextbox的大小)更改“const int offset”的值。将其设置为控件垂直中点的字符数,即((RichTextBox中的行数)/ 2)*(每行的字符数)。我使用了一个5行文本框,每行约50个字符,所以我将它设置为100。

如果对你有所帮助,别忘了接受答案。谢谢

    private void btnReset_Click(object sender, EventArgs e)
    {       
        richTextBox1.SelectAll();
        richTextBox1.SelectionBackColor = Color.White;
        richTextBox1.ScrollToCaret();
    }

    private void btnHighlight_Click(object sender, EventArgs e)
    {
        const int offset = 100;

        for (int i = 0; i < richTextBox1.TextLength; i++)
        {
            richTextBox1.Select(i, 1);
            richTextBox1.SelectionBackColor = Color.LightGray;

            if (i - offset > 0)
                richTextBox1.Select(i - offset, 1);
            else
                richTextBox1.Select(0, 1);

            richTextBox1.ScrollToCaret();

            Application.DoEvents();

            System.Threading.Thread.Sleep(50);

        }

    }
相关问题