2012-03-26 3 views
0

У меня есть RichTextBox и хотелось бы выделить целые слова, учитывая только его начальный индекс.Как выделить целое слово, учитывая его начальный индекс

Я смог выделить слово, если начальный индекс и длина известны, однако в этом случае я не знаю длины слова. Можно ли выделить из начального индекса первое заполнение пробела?

UPDATE:

Это то, что я пытался до сих пор:

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

К сожалению «SearchString» не всегда длина слова разыскивается, так что мне нужен способ найти количество символов от 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; 

Очевидно, что вы можете изменить char.IsLetterOrDigit с x != ' ' или что вы предпочитаете.

+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

Выбор метода принимает длину как второй параметр, а не конечный индекс;) – 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

Вы можете использовать метод Find, указав начальный указатель слова и найдите ПРОБЕЛ. Поиск вернет вам индекс следующего пространства и фактически конец слова (найдено - 1).

Затем вы можете использовать выделенный вызов.

Смежные вопросы