2016-02-04 68 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」的性格合適的索引的名稱替換textBox1以上。在您的代碼中,選擇起始點爲零,因此它總是會突出顯示第一個字符 –

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

確保你與你的文本框

+0

感謝您的幫助! – Jed5931

+0

我注意到,有時它會突出顯示某些字符。這可能是由於KeyUp事件。但是,如果我將代碼移動到按鍵事件中,它不喜歡索引? – Jed5931

+0

這很好,我修好了。 – Jed5931

0

如果我正確理解你的問題,問題只是你只選擇第一個字符作爲突出顯示。

你應該SelectionStart我被設置爲,所以它選擇和凸顯你是比較反對的字符:

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

    } 
+0

我試過了,它在輸入時突出了所有正確的匹配,並且在理想情況下我只想要currentPosition突出顯示 - 如果正確的話,突出顯示富文本框中的所有正確匹配。 – Jed5931

+0

感謝您的幫助! – Jed5931