2012-03-26 56 views
0

我有一个RichTextBox,并且想要突出显示整个词,只是给出它的起始索引。如何突出显示整个词,给定其起始索引

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

UPDATE:

这是我到目前为止已经试过:

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

不幸的是“搜索字符串”并不总是被搜索词的长度,所以我需要一种方法找到从novelOffset - 2到最近的空间的字符数量。

+0

你能分享一些代码吗?我相信有人会很快找出如何找到下一个空的空间。 – oleksii 2012-03-26 20:46:15

+0

当然,只是一秒:) – 2012-03-26 20:46:45

回答

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

这解决了我的问题!谢谢 :) – 2012-03-26 21:09:50

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

出于某种原因,这突出显示直到文本框的最后,而不是直到第一个空格。 – 2012-03-26 20:53:14

+1

选择方法将长度作为第二个参数,而不是结束索引;) – digEmAll 2012-03-26 20:53:27

+0

@digEmAll我刚刚注意到哈哈,我修正了我相信的代码,试试这个:) – Alexandre 2012-03-26 20:54:31

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方法给出您提供单词的起始索引并查找SPACE。查找会返回下一个空间的索引,实际上是单词的结尾(找到-1)。

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