【问题标题】:Highlight word to find in VB.NET突出显示要在 VB.NET 中查找的单词
【发布时间】:2017-06-17 20:29:24
【问题描述】:

我有一个 RichTextBox(我需要在其中查找所有单词的文本对应于 TextBox)、TextBox(用于键入要查找的单词)和一个 Button,当我单击 Button 时,我希望在在 RichTextBox 中,与 TextBox 中写入的单词对应的所有单词都以颜色突出显示(例如黄色)。我知道如何找到单词的第一次出现,但我不知道如何找到所有出现的位置。

仅突出显示单词第一次出现的代码:

'CodeCS is my RichTextBox

CodeCS.SelectionBackColor = Color.White 
CodeCS.Find(ToolStripTextBox1.Text, RichTextBoxFinds.MatchCase)
CodeCS.SelectionBackColor = Color.Yellow

【问题讨论】:

  • 如果您发布解决问题的尝试会更好。否则你的问题只是一个经典的gimme teh codez,它不会受到好评
  • 欢迎来到 Stack Overflow。如果您包含您已经编写的代码,那么帮助您会容易得多。
  • @sapanoia CodeCS.SelectionBackColor = Color.White CodeCS.Find(ToolStripTextBox1.Text, RichTextBoxFinds.MatchCase) CodeCS.SelectionBackColor = Color.Yellow 但它仅突出显示单词的第一次出现,而不是所有单词
  • @Steve 好吧抱歉。

标签: .net vb.net winforms visual-studio basic


【解决方案1】:

这里是搜索文本的简单循环 (rtb 是用于搜索文本的 RichTextBox)

Sub HighlightWord(searchText As String)
    Dim len = searchText.Length
    Dim pos = rtb.Find(searchText, 0, RichTextBoxFinds.NoHighlight)
    While (pos >= 0)
        rtb.Select(pos, len)
        rtb.SelectionBackColor = Color.Yellow
        if pos + len  >= rtb.Text.Length Then
            Exit While
        End If
        pos = rtb.Find(searchText, pos + len, RichTextBoxFinds.NoHighlight)
    End While
End Sub

【讨论】:

  • 转换为 VB.NET
  • 如果 pos + len == 富文本框中的文本长度,在顶部找不到重新启动?如果您搜索示例中的最后一个字符会发生什么?
  • @Icepickle 是的,这是正确的。如果您搜索的文本恰好是 RichBoxText 的最后一个单词 (char),则 Find 循环返回到文本的开头并且永远不会结束。因此需要进行故障安全检查。现在添加它
  • 酷,我昨天不小心调查了类似的事情并遇到了同样的行为,我想知道为什么你没有这种行为 :) 另外,我认为 pos 可以是 0,如果它是第一个字符跨度>
  • 啊,好吧,没真正测试过,你可以看看:-)
猜你喜欢
  • 1970-01-01
  • 2014-08-07
  • 2019-03-15
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
相关资源
最近更新 更多