winforms 如何在不更改光标位置的情况下设置文本背景颜色?

rqdpfwrv  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(121)

我想设置RichTextBox中特定文本范围的背景色。
但是,唯一的方法是按如下方式选择它:

RichTextBox1.Select(10, 3) 'select text starting from position 10, use a length of 3
    RichTextBox1.SelectionBackColor = Color.White

使用.Select将光标置于此位置。
如何在不更改光标位置的情况下实现相同的效果?
解决方案已经发布,只是重置光标,但这没有帮助。我需要一个方法不会设置光标到不同的位置。

a0zr77ik

a0zr77ik1#

若要同时保留上一个脱字符号位置和选取范围:

... Call to suspend drawing here 

var start = richTextBox1.SelectionStart;
var len = richTextBox1.SelectionLength;

richTextBox1.Select(10, 3); 
richTextBox1.SelectionBackColor = Color.White;

richTextBox1.SelectionStart = start;
richTextBox1.SelectionLength = len;

... Call to resume drawing here

要防止闪烁,请检查此帖子中提供的解决方案:https://stackoverflow.com/a/487757/6630084
TextBoxBase.SelectionStart Property
TextBoxBase.SelectionLength Property

edqdpe6u

edqdpe6u2#

您可以在设置颜色之前存储光标位置,然后按如下方式恢复位置:

Public Sub New()
    InitializeComponent()
    richTextBox1.Text += "RichTextBox text line 1" & Environment.NewLine
    richTextBox1.Text += "RichTextBox text line 2" & Environment.NewLine
    richTextBox1.Text += "RichTextBox text line 3" & Environment.NewLine

    Dim i As Integer = richTextBox1.SelectionStart
    Dim j As Integer = richTextBox1.SelectionLength

    richTextBox1.Select(10, 3)
    richTextBox1.SelectionBackColor = Color.White

    richTextBox1.SelectionStart = i
    richTextBox1.SelectionLength = j 'use this to preserve selection length, or
    richTextBox1.SelectionLength = 0 'use this to clear the selection
End Sub

相关问题