2011-07-10 23 views
5

tôi dường như được trải qua một vấn đề rất không bình thường với RichTextBox điều khiển, lập trình trong C# trong Visual Studio 2008.RichTextBox không chế biến nhân vật trở lại dòng/vận chuyển mới

Tôi hiện đang đọc dòng của một tệp được là được viết bởi cửa sổ giao diện điều khiển (với chuyển hướng đầu ra), và tôi đang đọc nó vào chương trình của tôi (về cơ bản, tôi đang tái tạo những gì được biết đến trong thế giới unix là "đuôi").

Khi một mảng byte được đọc, tôi muốn quay lại dòng mới và tiếp tục đọc. Tuy nhiên, có vẻ như RTB của tôi sẽ không trả lời các ký tự trả về dòng hoặc ký tự dòng mới. Ví dụ: tôi đã thử thêm \n, \r\n và thậm chí Environment.NewLine vào chuỗi được viết, nhưng dường như không có gì hoạt động. Nó chỉ tiếp tục viết trên cùng một dòng.

Dưới đây là đoạn code mà dường như được gây rắc rối:

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

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

Tôi thực sự lúng túng ở đây, bất cứ ai có thể giúp đỡ?

Trả lời

5

Có thể vì bạn đặt outputBox.Multiline thuộc tính thành false, điều này sẽ ngăn điều khiển hiển thị văn bản theo nhiều dòng.

Edit: Bạn nêu tại comment

mảng byte đang được gửi là một mà tôi làm bằng kích thước bộ, 512. Tôi bây giờ chỉ cần thay đổi đó để một mà thực sự phù hợp với các dữ liệu được lấp đầy trong đó, và bây giờ, tất cả của một kí tự xuống dòng đột ngột bắt đầu hoạt động trở lại

đây là những gì đã xảy ra:

lớp string trong C# là một mảng của char bắt đầu bằng con trỏ đến char đầu tiên trong mảng và kết thúc bằng "terminal" đặc biệt char \0. Vì vậy, khi bạn gọi System.Text.Encoding.UTF8.GetString(buffer) nếu kích thước bộ đệm lớn hơn kích thước chuỗi, nó sẽ thiết lập tất cả các ký tự còn lại của chuỗi thành giá trị đầu cuối char trong mảng char. mảng ký tự sẽ giống như some text\0\0\0, Vì vậy, tôi là đoán khi bạn thêm Environment.NewLine, nó sẽ thêm nó vào chỉ mục cuối cùng của mảng char sau \0 và sau đó mảng char sẽ là some text\0\0\r\n và do dòng mới là sau khi thiết bị đầu cuối nó sẽ bỏ qua nó.

+0

Điều đó đã được tôi đoán, thật không may, giá trị Multiline được đặt thành true. Để biết thêm thông tin, khi tôi gán cho thuộc tính Văn bản thay vì thêm vào nó, có vẻ như các ký tự dòng mới được nhận dạng đầy đủ, vì tôi có thể thấy con trỏ di chuyển xuống hai dòng với tôi sử dụng \ n \ n. Tuy nhiên, trong khối mã của tôi được đăng ở trên, nó vẫn không hoạt động. – TGP1994

+0

@ TGP1994: Thật kỳ quặc. Tôi đã kiểm tra nó: Thêm một 'Form'' Form1' mới và thêm vào nó một 'richTextBox1' mới với các giá trị mặc định của nó. Bây giờ tại mã đánh giá đa dòng thêm như 'richTextBox1.AppendText (" Testing ... "+ Environment.NewLine); richTextBox1.AppendText ("Testing ..." + Environment.NewLine); 'Nó sẽ hoạt động như mong đợi ... –

+0

Điều gì về nối thêm một chuỗi được tạo ra từ System.Text.Encoding.UTF8.GetString()? – TGP1994

-2

Chỉ cần đặt "\ n" hoặc Environment.NewLine riêng biệt như sau:

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

Nó làm việc cho tôi ... và bạn không phải lo lắng về \ 0

+0

Cảm ơn bạn đã thử, Jakub. :) Tôi sợ bạn trễ vài năm và câu trả lời chính xác ngắn ... Trong câu hỏi của tôi, tôi đã thêm một dòng mới. – TGP1994

+0

Xin chào, vâng tôi đã trễ quảng cáo tôi có cùng một vấn đề. Unfortunatelly bạn nối thêm dòng mới cùng với chuỗi và điều này gây ra cho tôi vấn đề. Một khi tôi tách nó, nó hoạt động cho tôi ;-) – Jakub

Các vấn đề liên quan