我有一个RichTextBox,并希望突出显示整个单词,只给出它的起始索引。
如果已知起始索引和长度,我已经能够突出显示一个单词,但是在这种情况下我不知道单词的长度。是否可以从起始索引突出显示空间的第一次出现?
更新
这是我到目前为止所尝试的:
resultsRichTextBox.Select(novelOffset - 2, searchString.Length);
不幸的是,'searchstring'并不总是所搜索单词的长度,因此我需要一种方法来查找从novelOffset - 2
到最近空间的字符数量。
答案 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)。
然后您可以使用选择呼叫。