RichTextBox не обрабатывает символы новой строки / возврата каретки - PullRequest
5 голосов
/ 10 июля 2011

Кажется, я испытываю очень необычную проблему с элементом управления RichTextBox, программированием на C # в Visual Studio 2008.

В настоящее время я читаю поток файла, который записывается окнами.консоль (с перенаправлением вывода), и я читаю ее в свою программу (по сути, я воссоздаю то, что известно в мире Unix как "tail").

Когда считывается массив байтов,Я хотел бы вернуться к новой строке и продолжить чтение.Однако, похоже, что мой RTB не будет отвечать на символы новой строки или возврата каретки.Например, я попытался добавить \n, \r\n и даже Environment.NewLine к записываемой строке, но, похоже, ничего не работает.Он просто продолжает писать через одну и ту же строку.

Вот код, который, кажется, вызывает проблемы:

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

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

Я действительно в растерянности, кто-нибудь может помочь?

Ответы [ 2 ]

5 голосов
/ 10 июля 2011

Вероятно, потому, что вы установили для свойства outputBox.Multiline значение false, что не позволит элементу управления отображать текст в несколько строк.

Редактировать: Вы заявили в комментарии

отправляемый массив байтов был тем, который я сделал с заданным размером, 512. Теперь я просто изменил его на тот, который фактически соответствует заполняемым в нем данным, и теперь, внезапно, начинается символ новой строки снова работает

Вот что произошло:

Класс string в C # - это массив char, начинающийся с указателя на первый символ в массиве и заканчивающийся специальным "терминальным" символом \0. Поэтому, когда вы вызываете System.Text.Encoding.UTF8.GetString(buffer), если размер буфера больше, чем размер строки, он установит все оставшиеся символы строки в терминальный символ в массиве символов. массив символов будет выглядеть примерно так: some text\0\0\0, поэтому я предполагаю , что при добавлении Environment.NewLine он будет добавлен в последний индекс массива char после последнего \0, а затем char массив будет some text\0\0\r\n и из-за новой строки после терминала он будет игнорироваться.

0 голосов
/ 06 августа 2015

Просто поместите "\ n" или Environment.NewLine отдельно следующим образом:

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

Это работает для меня ... и вам не нужно беспокоиться о \ 0

...