2012-03-26 5 views
0

RichTextBoxがあり、開始インデックスのみを指定して単語全体を強調表示したいと考えています。開始インデックスを指定して、単語全体を強調表示する方法

開始インデックスと長さがわかっていれば単語を強調表示できましたが、この場合は単語の長さがわかりません。開始インデックスからスペースの最初の出現までを強調することは可能ですか?

UPDATE:

resultsRichTextBox.Select(novelOffset - 2, searchString.Length); 

は、残念ながら「検索文字列」は常に検索された単語の長さではないので、私は方法が必要です:

これは私がこれまで試したものです最も近いスペースまでの文字の量をnovelOffset - 2から見つけること。

+0

いくつかのコードを共有できますか?誰かがすぐに次の空きスペースを見つける方法を見つけ出すだろうと確信しています。 – oleksii

+0

もちろん、ちょっと待ってください:) –

答えて

5

あなたはこのような何かを行うことができます。

int length = this.richTextBox1.Text.Skip(startIdx) 
           .TakeWhile(x => char.IsLetterOrDigit(x)) 
           .Count(); 
this.richTextBox1.Select(startIdx, length); 
this.richTextBox1.SelectionBackColor = Color.Yellow; 

は明らかにあなたが好むものは何でも x != ' 'かと char.IsLetterOrDigitを変更することができます。

+0

これは私の問題を解決しました!ありがとう:) –

3

あなたはString.IndexOf(Char, Int32)を使用することができます。

は、この文字列で指定された Unicode文字が最初に出現する位置のインデックスをレポートします。検索は指定された 文字位置から開始されます。

あなたの単語の開始と終了のインデックスが表示されます。それを強調表示することができます!

int endIndex = resultsRichTextBox.Text.IndexOf(' ', novelOffset - 2); 
resultsRichTextBox.Select(novelOffset - 2, (endIndex - (novelOffset - 2))); 

単語の後にスペースが見つからない場合は、何が起こるかを処理する必要があります。その場合はendIndexの値は-1になります。私は単にendIndexの値をsearchString.Lengthに設定します。

+0

何らかの理由で、これは最初のスペースまでではなく、テキストボックスの最後まで強調表示されています。 –

+1

Selectメソッドは、最後のインデックスではなく、最後のインデックスとして長さをとります; – digEmAll

+0

@digEmAll私はちょっと気付きました。私は信じて、このコードを修正しました:) – Alexandre

0
int startIndex; 

//fill startIndex with the known value 

int endIndex = startIndex; 

while(rtb.Text.CharAt(endIndex) != ' ' && endIndex < rtb.Text.Length) 
{ 
    endIndex++; 
} 

rtb.Select(startIndex, endIndex); 
0

単語の開始インデックスを指定してSPACEを検索すると、Findメソッドを使用できます。 Findは次のスペースのインデックスと実際には単語の最後を返します(found-1)。

次に、選択呼び出しを使用できます。

関連する問題