从输入更改字符颜色
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
替换为文本框的名称
如果文本框中的输入与富文本框中的输入匹配,我正在尝试更改字符的颜色。
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
替换为文本框的名称