【问题标题】:How to highlight a whole word, given its starting index给定起始索引,如何突出显示整个单词
【发布时间】:2012-03-27 05:08:57
【问题描述】:

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

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

更新:

这是我迄今为止尝试过的:

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

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

【问题讨论】:

  • 你能分享一些代码吗?我相信有人会很快弄清楚如何找到下一个空白空间。
  • 当然,等一下 :)

标签: c# .net winforms string richtextbox


【解决方案1】:

你可以这样做:

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 != ' ' 或任何您喜欢的。

【讨论】:

    【解决方案2】:

    您可以使用String.IndexOf(Char, Int32):

    报告指定的第一次出现的从零开始的索引 此字符串中的 Unicode 字符。搜索从指定位置开始 字符位置。

    它将为您提供单词的开始和结束索引。然后您可以突出显示它!

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

    您只需要处理如果单词后没有找到任何空格会发生什么。如果发生这种情况,endIndex 的值将是 -1。我只需将endIndex 的值设置为searchString.Length

    【讨论】:

    • 由于某种原因,这是突出显示到文本框的最后,而不是直到第一个空格。
    • Select 方法将长度作为第二个参数,而不是结束索引 ;)
    • @digEmAll 我刚刚注意到哈哈,我修复了我相信的代码,试试这个:)
    • 现在它只突出了大约一半的单词:/
    • 如果您只查找一个字符(即第一个空格),您的代码肯定会更好,但如果您需要更复杂的东西,例如搜索第一个非字母或非数字字符,LINQ 肯定更容易:)
    【解决方案3】:
    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);
    

    【讨论】:

      【解决方案4】:

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

      然后您可以使用 select 调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-21
        • 2017-11-24
        • 1970-01-01
        • 2014-08-07
        • 1970-01-01
        相关资源
        最近更新 更多