none
Cambiar de color una palabra en un rich textbox C#

    Question

  • Saludos a Todos, esta vez se me ha presentado lo siguiente y espero me puedan hechar la mano :)

    Que tal me dedico a realizar un editor de texto, y mi problema es el siguiente necesito que al escribir una palabra reservada por ejemplo "else" esta cambie a color rojo, utilizo un rich textbox, y debe de cambiar aunque se encuentre en una oracion:

    - la palabra reservada "else" se utiliza para... (debe de ponerse automaticamente en rojo para identificar que es una palabra reservada).

    No me doy una idea de como pueda hacer esto, alguna ayuda? o tip?

    saludos, gracias :D

    Saturday, April 14, 2012 6:31 AM

Answers

  • Hola,

    Copia esto en un formulario y diguja un RichTextBox.

    public partial class Form1 : Form
        {
            string[] Reservadas = new string[] { "else","if" };
            public Form1()
            {
                InitializeComponent();
                this.richTextBox1.TextChanged += (ob, ev) =>
                    {
                        var palabras = this.richTextBox1.Text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                        var resultado = from b in Reservadas
                                        from c in palabras
                                        where c == b
                                        select b;

                        int inicio = 0;
                        foreach (var item in resultado)
                        {
                            inicio = this.richTextBox1.Text.IndexOf(item, inicio);
                            this.richTextBox1.Select(inicio, item.Length);
                            this.richTextBox1.SelectionColor = Color.Red;
                            this.richTextBox1.SelectionStart = this.richTextBox1.Text.Length;
                            inicio++;
                        }

                        this.richTextBox1.SelectionColor = Color.Black;
                        this.richTextBox1.SelectionStart = this.richTextBox1.Text.Length;

                    };

               
            }

          
        }

    Y después escribe "esto es else y de nuevo else con if" en el RichTextBox y verás que maravilla:)

    Saludos

    phurtado
    Mi Blog Blog
    Sigueme en Twitter

    Saturday, April 14, 2012 11:58 AM
    Moderator
  • lo que quieres implementar es un Syntax Highlighting

    Syntax Highlighting in Rich TextBox Control - Part 1

    Enabling syntax highlighting in a RichTextBox

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Saturday, April 14, 2012 12:38 PM
  • Hola,

    Nos puedes decir con que versión del Framework estás trabajando, porque si eso como dices te da un error es una Lambda Expresion  que es lo mismo que se hace cuando desde la id de visual studio consumes un evento realmente eso es lo mismo que un metodo cuando tu quieres controlar el evento TextChanged.

    Con Framework 2.0 sería 

    private RichtTextBox1_TextChanged(object sender,EventArgs e)

    {

      // Resto del código.

    }

    A partir de la versión 3.5 se puede sustituir eso por +=(ob,ev)=> donde ob es el objeto sender y ev EventArgs, pero ojo que no te obliga a que se llamen ob,ev son nombre que yo utilizo. 

    En framework 2.0 existen los métodos anónimos que es lo mismo.

    Te pregunto en que versión estás trabajando porque no te daría solamente ese error si estás en 2.0 esta instrucción tampoco funcionaría puesto que es linq.

    Instrucción erronea sino estás en 3.5

     var resultado = from b in Reservadas
                                        from c in palabras
                                        where c == b
                                        select b;

    Podría ser que el nombre de RichTextBox no se llama "richtTextBox1", piensa que te estoy dando un enfoque de que cosas pueden ocasionar errores si estás en 2.0, pero te pido que en vez de decir "me suelta un error" pasa el error y vamos directos:)

    Saludos,


    phurtado
    Mi Blog Blog
    Sigueme en Twitter

    Saturday, April 14, 2012 9:05 PM
    Moderator

All replies

  • Hola,

    Copia esto en un formulario y diguja un RichTextBox.

    public partial class Form1 : Form
        {
            string[] Reservadas = new string[] { "else","if" };
            public Form1()
            {
                InitializeComponent();
                this.richTextBox1.TextChanged += (ob, ev) =>
                    {
                        var palabras = this.richTextBox1.Text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                        var resultado = from b in Reservadas
                                        from c in palabras
                                        where c == b
                                        select b;

                        int inicio = 0;
                        foreach (var item in resultado)
                        {
                            inicio = this.richTextBox1.Text.IndexOf(item, inicio);
                            this.richTextBox1.Select(inicio, item.Length);
                            this.richTextBox1.SelectionColor = Color.Red;
                            this.richTextBox1.SelectionStart = this.richTextBox1.Text.Length;
                            inicio++;
                        }

                        this.richTextBox1.SelectionColor = Color.Black;
                        this.richTextBox1.SelectionStart = this.richTextBox1.Text.Length;

                    };

               
            }

          
        }

    Y después escribe "esto es else y de nuevo else con if" en el RichTextBox y verás que maravilla:)

    Saludos

    phurtado
    Mi Blog Blog
    Sigueme en Twitter

    Saturday, April 14, 2012 11:58 AM
    Moderator
  • lo que quieres implementar es un Syntax Highlighting

    Syntax Highlighting in Rich TextBox Control - Part 1

    Enabling syntax highlighting in a RichTextBox

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Saturday, April 14, 2012 12:38 PM
  • Hola,

    Copia esto en un formulario y diguja un RichTextBox.

    public partial class Form1 : Form
        {
            string[] Reservadas = new string[] { "else","if" };
            public Form1()
            {
                InitializeComponent();
                this.richTextBox1.TextChanged += (ob, ev) =>
                    {
                        var palabras = this.richTextBox1.Text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                        var resultado = from b in Reservadas
                                        from c in palabras
                                        where c == b
                                        select b;

                        int inicio = 0;
                        foreach (var item in resultado)
                        {
                            inicio = this.richTextBox1.Text.IndexOf(item, inicio);
                            this.richTextBox1.Select(inicio, item.Length);
                            this.richTextBox1.SelectionColor = Color.Red;
                            this.richTextBox1.SelectionStart = this.richTextBox1.Text.Length;
                            inicio++;
                        }

                        this.richTextBox1.SelectionColor = Color.Black;
                        this.richTextBox1.SelectionStart = this.richTextBox1.Text.Length;

                    };

               
            }

          
        }

    Y después escribe "esto es else y de nuevo else con if" en el RichTextBox y verás que maravilla:)

    Saludos

    phurtado
    Mi Blog Blog
    Sigueme en Twitter

    que tal compañero, gracias por la ayuda, puedes orientarme, lo que pasa es que suelta un error al colocar la linea

    this.richTextBox1.TextChanged += (ob, ev) => 

     
    Saturday, April 14, 2012 8:22 PM
  • Hola,

    Nos puedes decir con que versión del Framework estás trabajando, porque si eso como dices te da un error es una Lambda Expresion  que es lo mismo que se hace cuando desde la id de visual studio consumes un evento realmente eso es lo mismo que un metodo cuando tu quieres controlar el evento TextChanged.

    Con Framework 2.0 sería 

    private RichtTextBox1_TextChanged(object sender,EventArgs e)

    {

      // Resto del código.

    }

    A partir de la versión 3.5 se puede sustituir eso por +=(ob,ev)=> donde ob es el objeto sender y ev EventArgs, pero ojo que no te obliga a que se llamen ob,ev son nombre que yo utilizo. 

    En framework 2.0 existen los métodos anónimos que es lo mismo.

    Te pregunto en que versión estás trabajando porque no te daría solamente ese error si estás en 2.0 esta instrucción tampoco funcionaría puesto que es linq.

    Instrucción erronea sino estás en 3.5

     var resultado = from b in Reservadas
                                        from c in palabras
                                        where c == b
                                        select b;

    Podría ser que el nombre de RichTextBox no se llama "richtTextBox1", piensa que te estoy dando un enfoque de que cosas pueden ocasionar errores si estás en 2.0, pero te pido que en vez de decir "me suelta un error" pasa el error y vamos directos:)

    Saludos,


    phurtado
    Mi Blog Blog
    Sigueme en Twitter

    Saturday, April 14, 2012 9:05 PM
    Moderator
  • Pues espero que alguien de ustedes logre ver esto, 

    tengo un problema al ejecutar el codigo, a lo que me refiero es q si agrego mas de 3 veces la palabra else me tira error y quisiera saber como se tendria q modificar para que acepte un salto de linea, puesto que cuando le doy enter ya no le modifica los colores.

    Gracias por su atencion

    Saludos cordiales.

    Monday, September 10, 2012 3:47 AM