2011-05-12 14 views
5

Tengo una lista de palabras que quiero destacar en mi control RichTextBox, tengo una idea de cómo hacerlo pero tengo un problema al analizar todo para separar las palabras.¿Cómo implementar el resaltado de sintaxis básica en Winforms RichTextBox?

Cómo puedo analizar una línea o el texto completo en palabras separadas y luego enumerarlas y colorearlas usando el método RichTextBox.Select().

¿Es esta una buena manera? ¿Hay una manera mejor/más rápida?

+4

Que el downvoter se atreven a decir por qué? –

Respuesta

2

Utilice el método RichTextBox.Find (String, Int32, Int32, RichTextBoxFinds) para buscar las cadenas en el control. Puede iterar cambiando el punto de inicio al punto después de la palabra actual.

No estoy seguro del rendimiento de este esquema, pero funcionará.

http://msdn.microsoft.com/en-us/library/yab8wkhy.aspx

1

Pruebe el método string.Split. Te devuelve una matriz de cadenas divididas por delimitador.

También usted puede encontrar útiles estos enlaces: link1link2

Y aún más: hay una fina example de aplicación similar

+0

Gracias, lo intenté ahora y eso debería funcionar, pero luego me di cuenta de que no podría usarlos para el método Select porque necesito saber dónde comienza esa palabra, y el caso de varias palabras iguales en la misma línea. –

2

Se puede utilizar en lugar de un Avalon EditRichTextBox, es gratis. Es el editor utilizado en #develop. Creo que es posible que deba sacar el conjunto de la descarga de la fuente #develop, pero vale la pena.

1

Puede utilizar el método RichTextBox.Find para encontrar una cadena en su RichTextBox. Este método devuelve la posición del texto que encontró. La muestra del código en ese enlace resaltará el texto.

1
Probablemente no

la manera más rápida, pero funciona.
Primera llamada ClearHighLighting para borrar anterior y luego llamar SetHighLighting

private readonly List<HighLight> _highLights = new List<HighLight>(); 
private class HighLight 
{ 
    public int Start { get; set; } 
    public int End { get; set; } 
} 

public void SetHighLighting(string text) 
{ 

    // Clear Previous HighLighting 
    ClearHighLighting(); 

    if (text.Length > 0) 
    { 
     int startPosition = 0; 
     int foundPosition = 0;    
     while (foundPosition > -1) 
     { 
      foundPosition = richTextBox1.Find(text, startPosition, RichTextBoxFinds.None); 
      if (foundPosition >= 0) 
      { 
       richTextBox1.SelectionBackColor = Color.Yellow; 
       int endindex = text.Length; 
       richTextBox1.Select(foundPosition, endindex);       
       startPosition = foundPosition + endindex;       
       _highLights.Add(new HighLight() { Start = foundPosition, End = endindex }); 
      } 
     } 
    } 
} 

public void ClearHighLighting() 
{ 
    foreach (var highLight in _highLights) 
    { 
     richTextBox1.SelectionBackColor = richTextBox1.BackColor; 
     richTextBox1.Select(highLight.Start, highLight.End);       
    } 
    _highLights.Clear(); 
} 
Cuestiones relacionadas