2011-07-10 14 views
5

Me parece estar experimentando un problema muy inusual con el control RichTextBox, programación en C# en Visual Studio 2008.RichTextBox no procesando nuevos caracteres de retorno de línea/carro

Actualmente estoy leyendo la corriente de un archivo que está siendo escrito por la consola de Windows (con redirección de salida), y lo estoy leyendo en mi programa (esencialmente, estoy recreando lo que se conoce en el mundo de Unix como "cola").

Cuando se lee una matriz de bytes, me gustaría volver a una nueva línea y continuar leyendo. Sin embargo, parece que mi RTB no responderá a los nuevos caracteres de línea o retorno de carro. Por ejemplo, he intentado anexar \n, \r\n e incluso Environment.NewLine a la cadena que se está escribiendo, pero parece que nada funciona. Simplemente sigue escribiendo en la misma línea.

Este es el código que parece estar causando problemas:

string convertedBuffer = System.Text.Encoding.UTF8.GetString((byte[])e.UserState); 

outputBox.AppendText(convertedBuffer + "\n"); 

estoy realmente en una pérdida aquí, ¿alguien puede ayudar?

Respuesta

5

Probablemente porque estableces la propiedad outputBox.Multiline en falso, lo que impedirá que el control muestre el texto en varias líneas.

Editar: Usted ha declarado ante el comentario

la matriz de bytes que se envían fue uno que hice del tamaño del conjunto, 512. Ahora que acaba de cambiar a uno que realmente se adapte está llenando los datos en ella, y ahora, de una, el carácter de nueva línea repente empiece a funcionar nuevamente

Esto es lo que sucedió:

la clase string en C# es una matriz de char comience por el puntero al primer carácter de la matriz y finalice por el carácter especial "terminal" char \0. Por lo tanto, cuando llame al System.Text.Encoding.UTF8.GetString(buffer) si el tamaño del búfer es mayor que el tamaño de cadena, establecerá todos los caracteres restantes de la cadena en el terminal char en la matriz char. la matriz de caracteres será algo así como some text\0\0\0, entonces estoy adivinando que cuando agrega Environment.NewLine lo agregará al último índice de la matriz de caracteres después de \0 y luego la matriz de caracteres será some text\0\0\r\n y debido a la nueva línea es después del terminal lo ignorará.

+0

que habría sido también creo, desafortunadamente, el valor de Multiline está establecido en verdadero. Para obtener más información, cuando asigno a la propiedad de texto en lugar de agregarlo, parece que los caracteres de nueva línea se reconocen completamente, ya que puedo ver que mi cursor se mueve hacia abajo dos líneas con I \ n \ n. Sin embargo, en mi bloque de código publicado anteriormente, todavía no está funcionando. – TGP1994

+0

@ TGP1994: Eso es extraño. Lo comprobé: agregué un nuevo 'Form'' Form1' y le agregué un nuevo 'richTextBox1' con sus valores predeterminados. Ahora, en el código, evalúe la línea de adición múltiple como 'richTextBox1.AppendText (" Testing ... "+ Environment.NewLine); richTextBox1.AppendText ("Testing ..." + Environment.NewLine); 'Funcionará como se esperaba ... –

+0

¿Qué tal anexar una cadena que se generó desde System.Text.Encoding.UTF8?GetString()? – TGP1994

-2

Sólo hay que poner "\ n" o Environment.NewLine separado de la siguiente manera:

outputBox.AppendText(convertedBuffer); 
outputBox.AppendText("\n"); 

que funciona para mí ... y usted no tiene que preocuparse de \ 0

+0

Gracias por el intento, Jakub. :) Me temo que llegas varios años tarde y la respuesta correcta es corta ... En mi pregunta ya estaba agregando una nueva línea. – TGP1994

+0

Hola, sí, llegué tarde y tuve el mismo problema. Desafortunadamente agregaste una nueva línea junto con una cuerda y esto me causó el problema. Una vez que lo separo, funciona para mí ;-) – Jakub