Как выделить целое слово, учитывая его начальный индекс - PullRequest
0 голосов
/ 27 марта 2012

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

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

ОБНОВЛЕНИЕ:

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

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

К сожалению, «searchstring» - это не всегда длина искомого слова, поэтому мне нужен способ найти количество символов от novelOffset - 2 до ближайшего пробела.

Ответы [ 4 ]

5 голосов
/ 27 марта 2012

Вы можете сделать что-то вроде этого:

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 != ' ' или что угодно.

3 голосов
/ 27 марта 2012

Вы можете использовать String.IndexOf(Char, Int32):

Сообщает нулевой индекс первого вхождения указанного Символ Юникода в этой строке. Поиск начинается с указанного позиция персонажа.

Это даст вам начальный и конечный индекс вашего слова. Затем вы можете выделить его!

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

Вам нужно разобраться, что произойдет, если после слова не будет пробела. Значение endIndex будет -1, если это произойдет. Я бы просто установил значение endIndex в searchString.Length.

0 голосов
/ 27 марта 2012

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

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

0 голосов
/ 27 марта 2012
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);
...