none
Problema con un textbox RRS feed

  • Pregunta

  • Hola les paso a comentar rapido, tengo un textbox multilinea y necesito hacer un salto de linea cada 12 caracteres, esto es posible?

    Si me ayudaran estaria genial...

    Saludos

    martes, 21 de abril de 2015 4:03

Respuestas

  • Es complicado lo que planteas. Tendrías que controlar que cada línea no pase de 12 caracteres y entonces introducir el salto de línea en esa línea (ten en cuenta que el usuario no tiene porqué estar editando la última). Además tienes que controlar la posición del cursor para actualizarla y dejarla en el mismo carácter.

    Podría ser algo así:

            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                int selectStart = textBox1.SelectionStart;
                string[] lines = textBox1.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
                string result = string.Empty;
                foreach (string line in lines)
                {
                    result += string.IsNullOrEmpty(result) ? string.Empty : Environment.NewLine;
                    string lineText = line;
                    while (lineText.Length>12)
                    {
                        result += lineText.Substring(0, 12) + Environment.NewLine;
                        lineText = lineText.Substring(12);
                        if (selectStart >= result.Length - Environment.NewLine.Length)
                            selectStart += Environment.NewLine.Length;
                    }
                    result += lineText;
                }
                textBox1.Text = result;
                textBox1.SelectionStart = selectStart;
            }

    Aunque sería mejor llevar el texto en una variable a parte para diferenciar los saltos de línea que ha introducido el usuario de los que se meten automáticamente (o simplemente ignorar los saltos de línea actuales e introducir uno cada 12 caracteres sin permitir que el usuario introduzca saltos de línea).

    martes, 21 de abril de 2015 7:28

Todas las respuestas

  • De manera automática, el texbox no lo hace. Tendrás que interceptar el evento de cambio del contenido del textbox, y dentro de ese evento meter código que analice el contenido e insertarle los saltos de línea segun proceda.

    La forma de hacer esto depende del tipo de aplicación (que no has indicado en tu pregunta). Por ejemplo, si es Winforms usarías el evento Change en el code-behind, pero si es ASP.NET tendrías que usar código en javascript porque el evento change del lado servidor sólo se dispara después de hacer un postback de la página.

    martes, 21 de abril de 2015 5:40
  • Gracias por la respuesta, mi aplicacion es de windows form y estaba intentando programar el evento text-changed del textbox y pense en algo asi...


    if (textBox1.TextLength >12)
        {
                    
            textBox1.Text = string.Format(textBox1.Text , Environment.NewLine);
                    


           }

    pero por alguna razon no me hace el salto de linea


    martes, 21 de abril de 2015 5:53
  • Hola:

    Con string.Format no añades una nueva línea, prueba con:

    textBox1.Text += Environment.NewLine;

    Un saludo

    martes, 21 de abril de 2015 7:15
  • Es complicado lo que planteas. Tendrías que controlar que cada línea no pase de 12 caracteres y entonces introducir el salto de línea en esa línea (ten en cuenta que el usuario no tiene porqué estar editando la última). Además tienes que controlar la posición del cursor para actualizarla y dejarla en el mismo carácter.

    Podría ser algo así:

            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                int selectStart = textBox1.SelectionStart;
                string[] lines = textBox1.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
                string result = string.Empty;
                foreach (string line in lines)
                {
                    result += string.IsNullOrEmpty(result) ? string.Empty : Environment.NewLine;
                    string lineText = line;
                    while (lineText.Length>12)
                    {
                        result += lineText.Substring(0, 12) + Environment.NewLine;
                        lineText = lineText.Substring(12);
                        if (selectStart >= result.Length - Environment.NewLine.Length)
                            selectStart += Environment.NewLine.Length;
                    }
                    result += lineText;
                }
                textBox1.Text = result;
                textBox1.SelectionStart = selectStart;
            }

    Aunque sería mejor llevar el texto en una variable a parte para diferenciar los saltos de línea que ha introducido el usuario de los que se meten automáticamente (o simplemente ignorar los saltos de línea actuales e introducir uno cada 12 caracteres sin permitir que el usuario introduzca saltos de línea).

    martes, 21 de abril de 2015 7:28