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

本文关键字:一行 文本 垂直 RichTextBox | 更新日期: 2023-09-27 18:17:41

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

我正试图滚动RichTextBox的内容,以保持当前发生变化的行在框的中间。

我可以将插入符号移动到顶部,或移动到底部,这将分别将文本向下移动并将插入符号置于框的顶部或向上移动并将插入符号置于框的底部。

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

希望这一切都有意义。

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

为了模拟"making change",我只是一次移动一个字符,并用灰色突出显示文本。

你必须根据你的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);
        }
    }