2016-11-25 9 views
1

私はrichtextboxでユーザーの検索語を見つけるGUIを作ろうとしています。私は2つのボタンを持っています。一つは文字列の次の位置を見出し、もう一つは検索された文字列の前の位置を見つけることです。私の「次へ」ボタンはうまく動作し、クリックするたびにテキスト内の次の文字列の位置を強調表示します。しかし、私の前のボタンは動作していないようです。私は間違って何をしていますか?検索した次の文字列と前の文字列を検索するには?

int index = 0; 

     //NEXT BUTTON 
private void button2_Click(object sender, EventArgs e) 
    { 
     richTextBox1.SelectionBackColor = Color.White; 
     richTextBox1.Find(textBox2.Text, index, richTextBox1.TextLength, RichTextBoxFinds.None); 
     richTextBox1.SelectionBackColor = Color.Yellow; 
     index = richTextBox1.Text.IndexOf(textBox2.Text, index) + 1; 
    } 

      // PREVIOUS BUTTON 
private void button1_Click(object sender, EventArgs e) 
    { 
     richTextBox1.Find(textBox2.Text, index -1, richTextBox1.TextLength, RichTextBoxFinds.None); 
     richTextBox1.SelectionBackColor = Color.White; 
     index = richTextBox1.Text.IndexOf(textBox2.Text, index) - 1; 
    } 

答えて

2

あなた自身で新しいインデックスを計算する必要はありません。 Findメソッドの結果を使用すると、正しいインデックスが得られます。後方を検索する場合は、RichTextBoxFinds.Reverseを使用します。誤って、前のボタンで黄色に色を設定していませんでした。

編集されたコード。それは今通りに動作します。

int selectionStart = 0; 
    int selectionStop = 0; 

    private void button1_Click(object sender, EventArgs e) 
    { 
     richTextBox1.SelectionBackColor = Color.White; 

     selectionStart = richTextBox1.Find(textBox1.Text, selectionStop, richTextBox1.TextLength, RichTextBoxFinds.None); 
     selectionStop = selectionStart + textBox1.Text.Length; 

     richTextBox1.SelectionBackColor = Color.Yellow; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     richTextBox1.SelectionBackColor = Color.White; 

     selectionStart = richTextBox1.Find(textBox1.Text, 0, selectionStart, RichTextBoxFinds.Reverse); 
     selectionStop = selectionStart + textBox1.Text.Length; 

     richTextBox1.SelectionBackColor = Color.Yellow; 
    }