Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Etsi *VB*

Sose [13.10.2002 21:06:48]

#

Eli, miten olisi helppo tehdä jonkinlainen etsi-toiminto VB:llä tehtyyn tekstinkäsittely ohjelmaan? Komponentti johon kirjoitetaan on RichTextBox. Koitin etsiä MSDN-helpistä, mutten löytänyt. Voisiko tätä tehdä CommonDialogin kautta? Vai meneekö vielä vaikeammaksi?
~Sose~

trinit [13.10.2002 21:53:41]

#

Etsitäänkö tietoa tekstikentän tekstistä? Jos etsitään, niin katsopa RichTextBox:n Find -metodi. Sillä ainakin saa tehtyä etsi-toiminnon kunhan ensin käyttäjältä kysytään mitä merkkijonoa etsitään.

Itse tein joskus tällaisen subin, jolla käytin Find:ia:

Public Sub FindAndHiglightWord(strWord As String)
'Etsii tekstikentästä strWord muuttujassa
'olevaa merkkijonoa. Mikäli merkkijono löytyy
'se valitaan tekstikentässä

    Dim FindStartPos As Long

    With frmMain
        FindStartPos = .rtBox.Find(strWord, 0, , rtfWholeWord)
    End With

End Sub

Tuossa Formin nimi on frmMain ja RichTextBox:n rtBox

Antti Laaksonen [13.10.2002 22:56:57]

#

Tässä on toinen tapa toteuttaa haku, joka toimii myös tavallisella tekstikentällä. Esimerkissä haku aloitetaan formia painamalla ja hakukohtia selataan F3-näppäimellä.

Dim painettu As Boolean

Private Sub Form_Click()
    EtsiMerkkijono "e", Text1
    'ero isojen ja pienten kirjaimien välille:
    'EtsiMerkkijono "e", Text1, True
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyF3 Then
        painettu = True
    End If
End Sub

Private Sub Form_Load()
    Text1.Text = "Tämä on esimerkkitekstiä"
    KeyPreview = True
End Sub

Sub EtsiMerkkijono(MerkkiJono As String, TekstiKentta As TextBox, Optional SuuretPienet As Boolean)
    Dim mj As String, ej As String
    Dim kohta As Integer
    If SuuretPienet Then
        mj = MerkkiJono
        ej = TekstiKentta.Text
    Else
        mj = LCase(MerkkiJono)
        ej = LCase(TekstiKentta.Text)
    End If
    If InStr(ej, mj) = 0 Then
        MsgBox "Ei etsittävää merkkijonoa."
    Else
        kohta = 1
        Do While InStr(kohta, ej, mj)
            kohta = InStr(kohta, ej, mj) + 1
            TekstiKentta.SelStart = kohta - 2
            TekstiKentta.SelLength = Len(mj)
            Do While painettu = False
                DoEvents
            Loop
            painettu = False
        Loop
        TekstiKentta.SelLength = 0
    End If
End Sub

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta