从输入更改字符颜色

时间:2016-02-04 22:13:00

标签: c# textbox richtextbox

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

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;
    }
}

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

2 个答案:

答案 0 :(得分:0)

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

您应该将 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;
        }

    }

答案 1 :(得分:0)

好的,这是你如何实现这一目标的。我使用过KeyUp事件而不是按键

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替换为文本框的名称