【问题标题】:Search first ocurrence of specific character in RichTextBox returns -1在 RichTextBox 中搜索特定字符的第一次出现返回 -1
【发布时间】:2018-11-04 06:19:31
【问题描述】:

我只是想找到当前行第一个空格的位置索引。

我编写的代码仅适用于整个 Richtextbox 中的第一个空格,但如果我尝试获取以下空格(同一行或以下行)的位置索引,我总是得到 - 1 我不知道为什么。

我一直在阅读以下文档: MSDN documentation link

我使用了 Find(Char[], Int32) 选项,方式如下:

RTB1.Find(CChar(" "), RTB1.GetFirstCharIndexOfCurrentLine)

问题是,当我尝试在第一个空格之后检测下一个空格时,我得到 -1。如果我使用该代码检测第一行的第一个空格,我会得到 6 作为结果(这是正确的)。但是对于以下空格,我总是得到 -1,即使它是第一行或以下几行。

【问题讨论】:

  • 运行此代码时插入符号的位置是什么?
  • 你为什么使用GetFirstCharIndexOfCurrentLine?当前行是包含插入符号的行,它很可能是最后一行。如果要在刚刚找到的索引之后查找下一个索引,则需要以刚刚找到的索引为起点。
  • 不,接受的答案效果不佳。如果您认为它确实如此,那是因为您没有正确测试它。尝试将“a b c”添加到第一行,将“d”添加到第二行,然后将插入符号放在末尾,您会看到它返回 -1,就像您的原始代码一样。两者都不能正常工作,并且通过适当的测试变得明显,这需要不止一次试验。
  • 根据您的问题,插入符号的位置与您要执行的操作无关,因此您用来执行此操作的代码不应依赖于插入符号的位置。

标签: vb.net winforms visual-studio-2013 richtextbox


【解决方案1】:

此代码将一次性为您提供所有空格字符的索引:

Dim index = RichTextBox1.Find({" "c})

Do Until index = -1
    MessageBox.Show(index.ToString())

    index = RichTextBox1.Find({" "c}, index + 1)
Loop

如果您想一次获得一个,那么您想要的是这样的:

Private index As Integer = -1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    index = RichTextBox1.Find({" "c}, index + 1)

    If index = -1 Then
        MessageBox.Show("No more spaces")
    Else
        MessageBox.Show(index.ToString())
    End If
End Sub

【讨论】:

  • 我已经用你的代码解决了这个问题。谢谢。
【解决方案2】:

试试这个。

Dim last = Me.rtb.Find(New Char() {" "}, Me.rtb.GetFirstCharIndexOfCurrentLine)

【讨论】:

  • 这与 OP 已经在做的事情有什么不同?另外,请注意代码格式化是通过将每行代码缩进四个空格来完成的。反引号 ( ` ) 仅用于inline 代码,例如,如果您在句子中间提及ButtonRichTextBox.Find() 等。您可以在Markdown and Formatting help 中阅读更多相关信息。跨度>
  • 完美,效果非常好。但是,有一个问题:为什么我的代码只适用于第一个空格而不适用于后面的空格?
  • @RichardSteele,此代码与您使用的代码基本上没有什么不同,只是它可以与Option Strict On 一起使用。如果你有问题,你仍然有同样的问题。我的猜测是,在这个测试中,你只是把插入符号放在了不同的地方。
  • 再想一想,它不适用于Option Strict On,因为它使用String 作为Char 数组中的元素,所以它也没有。
  • @jmcilhinney 我已经尝试了 codex 建议的代码并且它可以工作。使用我的代码,如果我尝试在第一个空格之后检测到以下空格(我的仅适用于第一个空格),它将返回 -1。尝试了几次并小心地将插入符号放置在文本的不同位置。使用 codex 的代码并将插入符号放在位置 0 上,它返回最后一行的第一个空白区域的位置索引。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 2017-11-02
相关资源
最近更新 更多