如果文本框中的输入与富文本框中的输入匹配,我尝试更改字符的颜色。
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;该功能停止工作,不会改变颜色。我尝试过的其他替代方案最终改变了所有匹配字符的颜色。我希望能够逐个字符地为它着色,如果它匹配,有没有办法轻松地做到这一点?
答案 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
替换为文本框的名称