Hola resulta que tengo que hacer un efecto que se seleccione una palabra y le cambie de color, utilice la propiedad find y selectColor pero sitengo varias palabras que quiero cambiar como "Create " solo me cambia la primera y las demas no.
les agradeceria me ayudaran ya que no se como hacer, le pego una copia del codigo para que vean si es un error mio u otra cosa. A por cierto esta en VB.NET
gracias de antemano
Private Sub analisisLexicoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles analisisLexicoToolStripMenuItem.Click
'realiza la busqueda de las palabras y les cambia de color segun su categoria
Dim Lineas() As String 'Almacena el valor de la linea de texto
Dim Vec_PalabrasEvaluar() As String 'Almacena palabra por palabra por medio de la funcion split
Lineas = rtbTexto.Lines
For a As Integer = 0 To UBound(Lineas)
Vec_PalabrasEvaluar = Split(Lineas(a), " ")
For b As Integer = 0 To straux.Count - 1
For c As Integer = 0 To UBound(Vec_PalabrasEvaluar)
If Vec_PalabrasEvaluar(c) = straux(b) Then
'MessageBox.Show(Vec_PalabrasEvaluar(c), "si", MessageBoxButtons.OK)
CambiaColor(straux(b))
End If
Next
Next
Next
End Sub
Public Sub CambiaColor(ByVal vec As String)
Dim wordToFind As String = vec
If rtbTexto.TextLength > 0 Then
'rtbTexto.Find(wordToFind, rtbTexto.SelectionStart, rtbTexto.SelectionLength, RichTextBoxFinds.WholeWord Or RichTextBoxFinds.MatchCase)
'se hace el cambio de color
Dim indexToText As Integer = rtbTexto.Find(wordToFind, RichTextBoxFinds.MatchCase Or RichTextBoxFinds.WholeWord)
rtbTexto.Select(indexToText, wordToFind.Length)
rtbTexto.SelectionColor = Color.Blue
End If
End Sub
Option Explicit On
Option Strict On
Imports System.Text.RegularExpressions
Public Class Form1
Private Sub Buscar_Coincidencia( _
ByVal pattern As String, _
ByVal RichTextBox As RichTextBox, _
ByVal cColor As Color, _
ByVal BackColor As Color)
Dim Resultados As MatchCollection
Dim Palabra As Match
Try
' PAsar el pattern e indicar que ignore las mayúsculas y minúsculas al mosmento de buscar
Dim obj_Expresion As New Regex(pattern.ToString, RegexOptions.IgnoreCase)
' Ejecutar el método Matches para buscar la cadena en el texto del control
' y retornar un MatchCollection con los resultados
Resultados = obj_Expresion.Matches(RichTextBox.Text)
' quitar el coloreado anterior
With RichTextBox
.SelectAll()
.SelectionColor = Color.Black
End With
' Si se encontraron coincidencias recorre las colección
For Each Palabra In Resultados
With RichTextBox
.SelectionStart = Palabra.Index ' comienzo de la selección
.SelectionLength = Palabra.Length ' longitud de la cadena a seleccionar
.SelectionColor = cColor ' color de la selección
.SelectionBackColor = BackColor
Debug.Print(Palabra.Value)
End With
Next Palabra
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
End Sub
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
' pasar el pattern, el Richtext, y los colores para el resalte
Buscar_Coincidencia(TextBox1.Text, RichTextBox1, Color.Blue, Color.Yellow)
End Sub
End Class
Fuente: :http://www.recursosvisualbasic.com.ar/htm/vb-net/9-richtextobx-highlight-color-en-vb-net.htm
Wow.... hace tiempo hubo un tema asi en el que participamos muchos :P y en ese momento nunca se me hubieran ocurrido usar expresiones regulares ;-) en cuanto a lo demas, es parecido al que hicimos :xD
El tema esta aca Ayuda con colores Richtextbox (http://foro.elhacker.net/net/ayuda_con_colores_richtextbox-t266249.0.html)
Espero que te sirva