如何根据其起始索引突出显示整个单词

时间:2012-03-26 20:42:57

标签: c# .net winforms string richtextbox

我有一个RichTextBox,并希望突出显示整个单词,只给出它的起始索引。

如果已知起始索引和长度,我已经能够突出显示一个单词,但是在这种情况下我不知道单词的长度。是否可以从起始索引突出显示空间的第一次出现?

更新

这是我到目前为止所尝试的:

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

不幸的是,'searchstring'并不总是所搜索单词的长度,因此我需要一种方法来查找从novelOffset - 2到最近空间的字符数量。

4 个答案:

答案 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 != ' '

答案 1 :(得分: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

答案 2 :(得分: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);

答案 3 :(得分:0)

您可以使用Find方法,只要您提供单词的起始索引并查找SPACE即可。 Find将返回下一个空格的索引,实际上是单词的结尾(找到 - 1)。

然后您可以使用选择呼叫。