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 Sub
Tuossa 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 Sub
Aihe on jo aika vanha, joten et voi enää vastata siihen.