如何将此代码更改为""找到前一个单词""在文本框中?

时间:2014-04-17 21:16:17

标签: vb6

当我尝试让程序在文本中找到任何单词时

我使用以下代码查找单词并选择它并找到下一个单词,但我不知道编写代码来制作"之前的单词" 如果我有这样的句子例如:"回家,去学校再回家 ...如果我使用前面的代码搜索单词" go"这段代码可以找到第一个出现的单词" go"并选择它和下一个出现等等......  如果我想回到第一次出现的单词"去"并选择它..什么是合适的代码?  我使用的代码:

Private Sub FindText(ByVal start_at As Integer)

target = Text2.Text
pos = InStr(start_at, " " & Text1.Text & " ", " " & target & " ", vbBinaryCompare)
If pos > 0 Then
    ' We found it.
    Text1.SetFocus
    TargetPosition = pos
    Text1.SelStart = TargetPosition - 1
    Text1.SelLength = Len(target)


Else
    ' We did not find it.
    MsgBox "Not found."
        'Text1.SetFocus
    End If
FindText 1          'search word in text
FindText TargetPosition + 1   ' search the next word

3 个答案:

答案 0 :(得分:1)

InStrRev功能

描述

从字符串的末尾返回一个字符串在另一个字符串中出现的位置。

语法

InstrRev(stringcheck, stringmatch[, start[, compare]])

InstrRev函数语法具有以下命名参数:

StrReverse功能

描述

返回一个字符串,其中指定字符串的字符顺序颠倒过来。

语法

StrReverse(expression)

答案 1 :(得分:0)

Text= "cat cat cat"
Search = "cat"

Pos = Instr(Text, Search)
Pos = Instr(Pos, Text, Search)

Pos = InstrRev(Text, StrReverse(Search), Len(Text) - Pos)

Dunno,如果它有效,但是类似的东西。

答案 2 :(得分:0)

我尝试使用strReverse函数,但是找到字符串反转非常混乱,然后在字符串中找到正确的索引,所以我用一个只使用强力搜索字符串的函数重写了答案。

该函数将字符串的左侧搜索到起始位置,因为我们从一开始就向后搜索,所以我们不关心任何东西。然后它接受片段的子串并运行Instr函数以查看是否找到匹配。如果没有找到匹配且Mid $函数的起始索引仍然大于1,则起始索引递减1并再次尝试Instr函数。

Private Enum SearchDirection
    Forward = 0
    Backwards = 1
End Enum

Private Sub Command1_Click()

    SearchForString CInt(Text1.SelStart + Text1.SelLength), Check1.Value

End Sub

Private Sub SearchForString(ByVal vStart As Integer, Optional Direction As SearchDirection = Forward)
    Dim intIndex As Integer     ' receives return value of InStr function
    Dim intStart As Integer     ' the start parm for the Instr function
    Dim strToSearch As String   ' the string1 parm for the Instr function
    Dim strToFind As String     ' the string2 parm for the Instr function

    strToSearch = Text1.Text
    strToFind = Text2.Text
    intStart = vStart

    If Direction = Forward Then
        Text1.SelStart = Len(strToSearch)
        Text1.SelLength = 0
        If intStart >= Len(strToSearch) Or vStart = 0 Then ' reset the start and begin the search again
            intStart = 1
        End If
        intIndex = InStr(intStart, strToSearch, strToFind, vbBinaryCompare)
    Else
        intIndex = FindPrevious(vStart - Len(strToFind))
    End If

    If intIndex > 0 Then
        Text1.SelStart = intIndex - 1
        Text1.SelLength = Len(strToFind)
        Text1.SetFocus
    Else
        Text1.SelStart = Len(strToSearch)
        Text1.SelLength = 0
    End If

End Sub

Private Function FindPrevious(ByVal vStart As Integer) As Integer
    Dim strFragment As String
    Dim intStart As Integer
    Dim intIndex As Integer

    If vStart > 0 Then
        intStart = vStart
    Else
        intStart = Len(Text1.Text)
    End If

    strFragment = Left$(Text1.Text, intStart)
    Do While intStart > 1 And intIndex = 0
        intStart = intStart - 1
        intIndex = InStr(Mid$(strFragment, intStart), Text2.Text)
    Loop
    FindPrevious = intStart

End Function

此代码依赖于Text1的SelStart属性。要使用此示例,请创建一个新项目并将代码添加到form1代码中。此代码将在字符串上重复循环。如果要显示消息,则需要修改它。错误处理由你决定。