Trova successivo in RichTextBox

lunedì 29 settembre 2008 - 17.33

aleroot Profilo | Junior Member

Ho un piccolo programmi che effettua delle ricerche su una richtextbox con il seguente codice :

Dim SearchText, Result As String

SearchText = ToolStripTextBox1.Text
Result = RichTextNote.Find(SearchText, 0)
If Result = -1 Then MsgBox("Testo non Trovato!", MsgBoxStyle.Exclamation)
RichTextNote.Focus()

Come posso fare per implementare la funzione trova successivo?

aiedail92 Profilo | Expert

Ciao

Puoi usare una funzione come questa:

Function GetAllMatchIndexes(ByVal searchString As String) As Integer() 'Contiene tutti gli indici del primo carattere del match Dim results As New List(Of Integer) 'Ottiene l'indice del primo carattere trovato Dim index As Integer = RichTextNote.Find(searchString, 0, RichTextBoxFinds.None) 'Se non c'è nessuna corrispondenza ritorna nothing If (index = -1) Then Return Nothing End If 'Altrimenti cerca ogni indice successivo e lo aggiunge ai risultati Do 'Aggiunge l'indice alla lista dei risultati results.Add(index) 'trova il nuovo indice index = RichTextNote.Find(searchString, index, RichTextBoxFinds.None) Loop While index <> -1 'Ottiene il risultato Return results.ToArray() End Function

Che ottiene gli indici del primo carattere di tutte le occorrenze trovate nel testo.

Luca

freeteo Profilo | Guru

ciao,
ottima la soluzione proposta, ma io ti consiglio di dare anche un'occhiata alle Regular Expression, che in operazioni di ricerca ti aiutano moltissimo, soprattutto quando la ricerca è complicata e non solo una "stringa" normale.

Ad esempio puoi usare un codice di questo tipo:
Regex regex= new Regex("stringa", RegexOptions.IgnoreCase); foreach (Match m in regex.Matches("testo di input")) { int inizio = m.Index; int lunghezza= m.Length; string valore = m.Value; }
dove "testo di input" sarebbe il testo della tua ritchtexbox, e "da trovare" è la stringa da trovare.
Chiaro che cercare una sola stringa dentro ad un testo con regex non ti fa capire la potenzialità dell'oggetto, perchè è semplice come cosa da fare, il momento che ti farà apprezzare le Regex è sicuramente quando la ricerca si complica, come ad esempio quando "vuoi tutti i numeri di telefono, o gli indirizzi email" etc...insomma cose complicate.

Il mio è solo un "input" per valutare cosa è meglio fare

info:
http://msdn.microsoft.com/it-it/library/system.text.regularexpressions.regex.aspx
http://www.regular-expressions.info/
http://en.wikipedia.org/wiki/Regular_expression


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

aiedail92 Profilo | Expert

Non avevo proposto le Regex perchè la ricerca era una semplice stringa, il motore di Regular Expressions è decisamente potente, ma mi sembrava "sprecato" per un lavoro così banale

Tienile comunque da conto perchè sono uno strumento valido e utile in molte occasioni.

Per quanto riguarda l'esempio di Matteo fai solo attenzione che alcuni caratteri hanno un significato particolare nelle Regular Expressions, quindi devi prima eseguire gli escape per le sequenze di caratteri se stai cercando del testo letterale; per farlo puoi usare il metodo Regex.Escape(searchString)

Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5