.NET — длинная строка в RichTextBox, обернутая после 3510 символов

У меня есть RichTextBox в программе WInForms, которая переносит любую строку, длина которой превышает 3510 символов. У меня для WordWrap установлено значение false, поэтому все строки меньше этой длины обычно растягиваются без переноса. Что я делал, чтобы обойти это, так это устанавливал RightMargin на большое число, такое как 100 000, которое все еще работает, но теперь, когда я нахожусь в Windows 7, а не в XP, я получаю полосу прокрутки, которая прокручивается, как если бы текстовое поле было линии такой большой длины, когда это не так.

Для репликации просто создайте программу winforms с RichTextBox и Button. В событии нажатия кнопки поместите следующее:

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 3511; i++)
            sb.Append('A');
        richTextBox1.Text = sb.ToString();

После того, как вы увидите обертку, измените RightMargin текстового поля на 100000 и обратите внимание на полосу прокрутки, которая появляется еще до запуска программы (только на 7 и, возможно, на Vista). Строка больше не переносится, но я хочу, чтобы полоса прокрутки действовала только на текст в поле, а не на заранее определенную длину.


person Jeffrey Harmon    schedule 27.12.2010    source источник
comment
Нет ли лучшего способа снять шкуру с этого кота, чем заставлять пользователя столько прокручивать, чтобы просмотреть данные?   -  person Aaron McIver    schedule 27.12.2010
comment
Я воспроизвел. Выглядит преднамеренно, очень дорого исправить.   -  person Hans Passant    schedule 28.12.2010
comment
@Hans Да, я так и сделал, как кажется, исходя из размера шрифта ... вы можете получить больше / меньше 3510 в зависимости от свойств шрифта, а не жесткое значение.   -  person Aaron McIver    schedule 28.12.2010
comment
@Aaron Моя программа представляет собой средство просмотра текстовых файлов, поэтому она должна иметь возможность отображать все, что есть в файле, точно так, как оно есть. Есть несколько редких файлов с разделителями или фиксированной ширины, которые мы получаем, в которых строки длиннее, и мне нужно быть уверенным, что они отображаются правильно.   -  person Jeffrey Harmon    schedule 29.12.2010
comment
Поймите, что вы хотите предоставить копию; однако есть подсказки и способы по-прежнему предоставлять точную копию, но уведомлять пользователя о том, что линия продолжается в точке X, и перемещать ее на другую строку и т. д. Сделайте пользовательский интерфейс удобным для пользователя; просто потому, что строка текста состоит из N символов, это не означает, что пользовательский интерфейс должен отображать их в одной непрерывной строке, что заставляет пользователя прокручивать до бесконечности.   -  person Aaron McIver    schedule 29.12.2010


Ответы (1)


Вы могли бы установить rightmargin RichTextBox на ширину строки? Нравится

richTextBox1.RightMargin = 
TextRenderer.MeasureText(sb.ToString(), this.richTextBox1.Font).Width;
person Eivind T    schedule 30.12.2010
comment
Спасибо! Я надеялся на большее, чем просто настройку, но я могу просмотреть каждую строку в текстовом поле, найти самую длинную и просто установить ее. - person Jeffrey Harmon; 05.01.2011