2016-02-04 3 views
0

Я пытаюсь изменить цвет символа, если ввод текстового поля соответствует значению в текстовом поле.Изменение цвета символа с ввода

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

Он выделяет текущую букву только в том случае, если она соответствует. Например, если слово в текстовом поле богатое является «воздушным шаром», а введенный первый ввод «b», он соответствует и меняет цвет, но если следующая буква была добавлена ​​«ba», функция перестает работать и не меняет цвет. Другие альтернативы, которые я пробовал, в конечном итоге меняют цвета всех совпадающих символов. Я хочу, чтобы он мог покрасить его по характеру, если он соответствует, есть ли способ сделать это легко?

+0

Вам нужно правильно установить 'rchtxtbox.SelectionStart» к соответствующему индексу характера. В вашем коде начальная точка выбора равна нулю, поэтому всегда будет выделяться первый символ. –

+0

Я попытался изменить значение на значение i, но это подсвечивает все совпадения. Пример, если бы я имел «plop», если бы я набрал «p», он выделил бы как начало, так и конец p – Jed5931

+0

Ok, а затем получить последний ключевой символ из текстового поля, получить его индекс и сопоставить один и тот же индексный символ из richtextbox, если совпадение подсвечивает, что один вместо запуска цикла –

ответ

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 выше с именем вашего текстового поля

+0

спасибо за помощь! – Jed5931

+0

Я заметил, что порой он пропускает выделение некоторых персонажей. Это может быть связано с событием KeyUp. Однако, если я переместил код в событие нажатия клавиши, ему не нравится индекс? – Jed5931

+0

это хорошо, я исправил его. – Jed5931

0

Если я правильно понимаю ваши вопросы, проблема в том, что вы только выбираете первый символ для выделения.

Вы должны быть настройки SelectionStart к я, поэтому он выбирает и подчеркивает характер вы сравниваете против:

rchtxtbox.SelectionStart = i; 

Edit:

Подумав о том, что вы пытаясь сделать, я думаю, у вас есть богатое текстовое поле с текстом в нем. У вас также есть текстовое поле, которое вводит пользователь. Когда пользователь вводит текст в текстовое поле, вы хотите выделить этот текст в текстовом поле rich. Верный?

Вот простой пример, хотя это не учитывает множественные вхождения найденного текста.

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

    } 
+0

Я пробовал это, и он принимает входные данные и выделяет все правильные совпадения в богатом текстовом поле, когда в идеале я хочу, чтобы подсветка currentPosition была подсвечена - если это правильно. – Jed5931

+0

благодарит за помощь! – Jed5931

Смежные вопросы