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~
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 SubTuossa Formin nimi on frmMain ja RichTextBox:n rtBox
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 SubAihe on jo aika vanha, joten et voi enää vastata siihen.