es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Diferentes etiquetas de formato de texto enriquecido para diferentes saltos de línea (\r, \n, \r\n).

Estoy intentando editar código (C++/C#/Java) en un RichTextBox de una aplicación de Windows Forms.
Dado que hay diferentes separadores de línea en diferentes plataformas, estoy utilizando este código para codificar el texto enriquecido:

value = value
    .Replace("\r\n", "\\par ")
    .Replace("\r", "\\par ")
    .Replace("\n", "\\par ");

Los 3 tipos de separadores de línea se muestran correctamente. Pero luego me di cuenta de que, dado que \r\n (2 caracteres en el contenido del archivo) se ha codificado como \par (1 caracter en RichTextBox.Text), el índice de un determinado texto es diferente. Por lo tanto, RichTextBox.Select(indice, longitud) seleccionará el texto en la posición incorrecta si la posición se calculó a partir del contenido del archivo sin procesar. Por cada línea adicional, la diferencia de índice aumenta en 1.

Estoy pensando si hay algo como “\return\par”, que se cuenta como 2 caracteres pero se muestra como 1 separador de línea; y en RichTextBox.Text (se guardará como contenido del archivo), se decodifica como “\r\n”.

Y si no hay otra forma, ¿existe alguna otra manera de alinear el índice del contenido del archivo y RichTextBox.Text? Gracias.

Por cierto, tengo una forma poco elegante de solucionarlo: RichTextBox.Select(indice – numeroLinea, longitud). Pero es realmente feo.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para editar código en un RichTextBox en una aplicación WinForms

    Cuando se edita código en un RichTextBox de una aplicación WinForms, puede haber problemas con diferentes caracteres de salto de línea en diferentes plataformas. Para codificar el texto enriquecido, se puede utilizar el siguiente código:

    “`C#
    valor = valor
    .Replace(“\r\n”, “\par “)
    .Replace(“\r”, “\par “)
    .Replace(“\n”, “\par “);


    Si bien los tres tipos de caracteres de salto de línea se muestran correctamente, surge un problema cuando \r\n (dos caracteres en el contenido del archivo) se codifica como \\par (un carácter en RichTextBox.Text). Esto hace que el índice de cierto texto difiera y RichTextBox.Select(indice, longitud) seleccionará texto en una posición incorrecta si la posición se calculó a partir del contenido sin procesar del archivo. La diferencia en el índice aumenta en uno por cada línea adicional. Una solución potencial es usar una combinación de \r y \n que se cuente como dos caracteres pero se muestre como un único caracter de salto de línea en RichTextBox.Text. Sin embargo, esto no existe. Una solución alternativa es alinear el índice del contenido del archivo y RichTextBox.Text. Una forma de lograr esto es utilizando el siguiente código: ```C# RichTextBox.Select(indice - numeroLinea, longitud);

    Si bien esta solución puede considerarse “poco elegante”, ofrece una manera de resolver el problema hasta que se encuentre una solución más limpia.

Comments are closed.