从输入更改字符颜色

Changing character colour from input

如果文本框中的输入与富文本框中的输入匹配,我正在尝试更改字符的颜色。

char key = e.KeyChar;
for(int i = 0; i < rchtxtbox.Text.Length; i++)
{
    char currentLetter = rchtxtbox.Text[i];
    if (key == currentLetter)
    {
        rchtxtbox.SelectionStart = 0;
        rchtxtbox.SelectionLength = 1;
        rchtxtbox.SelectionColor = Color.White;
        rchtxtbox.SelectionBackColor = Color.LightGreen;
    }
}

如果匹配,它只会突出显示当前字母。一个示例是,如果富文本框中的单词是 "balloon" 并且首先输入的输入是 "b",它会匹配并更改颜色,但如果添加了下一个字母 "ba",则该功能将停止工作并且不会改变颜色。我尝试过的其他选择最终改变了所有匹配字符的颜色。如果匹配,我希望能够逐字符着色,有没有办法轻松做到这一点?

如果我没有正确理解你的问题,问题只是你只选择了第一个字符进行突出显示。

您应该将 SelectionStart 设置为 i,以便它选择并突出显示您要比较的字符:

rchtxtbox.SelectionStart = i;

编辑:

考虑过您要尝试执行的操作后,我认为您有一个包含文本的富文本框。您还有一个用户正在输入的文本框。当用户在文本框中键入内容时,您希望在富文本框中突出显示该文本。正确吗?

这是一个简单的示例,尽管这并未说明所找到文本的多次出现。

        private void textBox1_TextChanged(object sender, EventArgs e)
    {
        int idx = richTextBox1.Text.IndexOf(textBox1.Text);

        if (idx > -1)
        {
            richTextBox1.SelectionStart = idx;
            richTextBox1.SelectionLength = textBox1.Text.Length;
            richTextBox1.SelectionColor = Color.White;
            richTextBox1.SelectionBackColor = Color.LightGreen;
        }

    }

好的,以下是实现此目标的方法。我使用了 KeyUp 事件而不是 keypress

private void textBox1_KeyUp(object sender, KeyEventArgs e) {           
    if (textBox1.TextLength == 0) { return; }

    int index;
    index = textBox1.TextLength - 1;
    char key = textBox1.Text[index];

    if (rchtxtbox.TextLength > index  && rchtxtbox.Text[index] == key) {   
        if (rchtxtbox.Text[index] == key) {
                rchtxtbox.SelectionStart = index;
                rchtxtbox.SelectionLength = 1;
                rchtxtbox.SelectionColor = Color.White;
                rchtxtbox.SelectionBackColor = Color.LightGreen;
        }
    }
}

确保将上面的 textBox1 替换为文本框的名称