2011-07-10 48 views
5

我似乎遇到在C#與RichTextBox控制一個非常不尋常的問題,規劃在Visual Studio 2008中RichTextBox中不處理新行/回車符

目前我在讀這就是BEING文件的流(通過輸出重定向)寫入,並將其讀入我的程序中(實質上,我正在重新創建unix世界中已知的「尾巴」)。

當讀入一個字節數組時,我想返回一個新的行,並繼續閱讀。但是,似乎我的RTB不會響應新行或回車符。例如,我嘗試在正在寫入的字符串上追加\n\r\n,甚至Environment.NewLine,但似乎沒有任何工作。它只是一直寫在同一行。

這裏要說的是,似乎在代碼中造成麻煩:

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

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

我真的在這裏損失,誰能幫助?

回答

5

它可能是因爲你設置outputBox.Multiline屬性爲false,這將防止控件顯示多行文本。

編輯:您在評論說

正在發送的字節數組是一個我做了一套大小的,512我現在只是改變了一個實際擬合數據填充在裏面,而現在,突然之間,換行字符的再次開始工作

這裏是發生了什麼:

string類在C#是0123數組由指向數組中第一個char的指針開始,並以特殊的「終端」char \0結束。所以當你調用System.Text.Encoding.UTF8.GetString(buffer)時,如果緩衝區大小大於字符串大小,它會將字符串的所有剩餘字符設置爲char數組中的終端字符。字符數組將會類似some text\0\0\0,所以我猜測,當你添加Environment.NewLine它會將它添加到最後的\0之後的char數組的最後一個索引,然後char數組將會是some text\0\0\r\n,並且由於新行在終端之後它會忽略它。

+0

這將是我的猜測,不幸的是,多行值設置爲true。有關更多信息,當我將Text屬性分配給Text屬性而不是添加到它時,似乎新行字符被完全識別,因爲我可以看到我的光標在兩行中移動,並使用\ n \ n。但是,在我上面發佈的代碼塊中,它仍然不起作用。 – TGP1994

+0

@ TGP1994:很奇怪。我檢查了它:添加了一個新的'Form'' Form1',並添加了一個新的'richTextBox1'及其默認值。現在在代碼中評估多個添加行,如'richTextBox1.AppendText(「Testing ...」+ Environment.NewLine); richTextBox1.AppendText(「Testing ...」+ Environment.NewLine);'它將按預期工作... –

+0

如何附加從System.Text.Encoding.UTF8生成的字符串。GetString的()? – TGP1994

-2

只要把「\ n」或Environment.NewLine分別如下:

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

它爲我...你不必擔心\ 0

+0

謝謝你的嘗試,Jakub。 :)恐怕你晚了幾年,正確答案很簡短......在我的問題中,我已經添加了一個換行符。 – TGP1994

+0

嗨,是的,我遲到了廣告我有同樣的問題。不幸的是,你將新的行與字符串一起追加,這導致了我的問題。一旦我分開它,它適用於我;-) – Jakub