C# RichTextBox不处理新行/回车符

C# RichTextBox不处理新行/回车符,c#,.net,string,visual-studio-2008,richtextbox,C#,.net,String,Visual Studio 2008,Richtextbox,在VisualStudio2008中,我似乎遇到了一个非常不寻常的问题,即用C语言编程的RichTextBox控件 我目前正在读取windows控制台写入的文件流(带有输出重定向),并将其读入我的程序(本质上,我正在重新创建unix世界中称为“tail”的内容) 当读入字节数组时,我想返回到新行,继续读取。然而,我的RTB似乎不会响应新行或回车字符。例如,我尝试将\n、\r\n甚至Environment.NewLine添加到正在编写的字符串中,但似乎没有任何效果。它只是不断地在同一条线上书写 以

在VisualStudio2008中,我似乎遇到了一个非常不寻常的问题,即用C语言编程的
RichTextBox
控件

我目前正在读取windows控制台写入的文件流(带有输出重定向),并将其读入我的程序(本质上,我正在重新创建unix世界中称为“tail”的内容)

当读入字节数组时,我想返回到新行,继续读取。然而,我的RTB似乎不会响应新行或回车字符。例如,我尝试将
\n
\r\n
甚至
Environment.NewLine
添加到正在编写的字符串中,但似乎没有任何效果。它只是不断地在同一条线上书写

以下是可能导致问题的代码:

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

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

我在这里真的不知所措,有人能帮忙吗?

这可能是因为您将
outputBox.Multiline
属性设置为false,这将阻止控件以多行方式显示文本

编辑:您在评论中指出

正在发送的字节数组是我用设置大小512制作的。我现在只是把它改成了一个符合填充数据的字符,现在,突然之间,换行符又开始工作了

发生的情况如下:

C#中的
字符串
类是
字符的数组
以指向数组中第一个字符的指针开始,以特殊的“terminal”字符
\0
结束。因此,当您调用
System.Text.Encoding.UTF8.GetString(buffer)
时,如果缓冲区大小大于字符串大小,它会将字符串的所有剩余字符设置为字符数组中的终端字符。字符数组类似于
一些文本\0\0\0
,所以我猜当你添加
Environment.NewLine时,它将把它添加到字符数组的最后一个索引中,在最后一个
\0
之后,然后字符数组将是
一些文本\0\r\n
,因为新行在终端之后,它将忽略它。

只需将“\n”或Environment.NewLine分别放在下面:

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

它对我有用。。。您不必担心\0

这也是我的猜测,不幸的是,Multiline值设置为true。有关详细信息,当我指定给Text属性而不是添加到该属性时,似乎可以完全识别换行符,因为我可以看到我的光标在使用时向下移动了两行\n\n。然而,在我上面发布的代码块中,它仍然不起作用。@TGP1994:这很奇怪。我检查了它:添加了一个新的
表单
表单1
,并添加了一个新的
richTextBox1
及其默认值。现在在代码评估多添加行,如
richTextBox1.AppendText(“Testing…”+Environment.NewLine);richTextBox1.AppendText(“测试…”+环境.换行符)它将按预期工作…如何附加从System.Text.Encoding.UTF8.GetString()生成的字符串?@TGP1994:同样,将代码更改为
richTextBox1.AppendText(System.Text.Encoding.UTF8.GetString(System.Text.Encoding.UTF8.GetBytes(“测试…”)+Environment.NewLine)并且它仍将打印相同的预期结果。我明白了。。这可能是因为字符串的剩余字节被设置为字符串终端值
\0
,因此当您添加新行时,它会将其添加到
char
数组中包含“\0”以外的值的最后一个位置之后,并且在新行之后的char数组中仍然有剩余的null终端字符,因此新行将被忽略。。我将更新答案以包含更多信息。谢谢您的尝试,Jakub.:)恐怕你迟到了好几年,而且正确答案很短。。。在我的问题中,我已经添加了一个新行。嗨,是的,我迟到了,我也有同样的问题。不幸的是,您将新行与字符串一起追加,这导致了问题。一旦我把它分开,它就对我有用;-)