C #: многострочный TextBox с TextBox.WordWrap Отображение длинной строки Base64 - PullRequest
9 голосов
/ 02 января 2011

У меня есть текстовое поле для отображения очень длинной строки Base64.TextBox.Multline = true и TextBox.WordWrap = true.

Проблема вызвана автоматическим определением границ слов самого TextBox.Строка Base64 имеет «+» как один из 64 символов для кодировки Base64.Поэтому TextBox обернет его символом «+», а это не то, что я хочу (потому что использование может подумать, что вокруг символа «+» есть символ новой строки).

Я просто хочу, чтобы мой символСтрока Base64 отображается в Mulitline-режиме в TextBox, но без определения границы слова, то есть, если TextBox.Width может содержать только 80 символов, то каждая строка должна иметь точно 80 символов, кроме последней строки.

1 Ответ

2 голосов
/ 02 января 2011

Умная упаковка слишком умна для ваших целей. Просто сохраните Multiline, выключите WordWrap и оберните текст самостоятельно:

public IEnumerable<string> SimpleWrap(string line, int length)
{
    var s = line;
    while (s.Length > length)
    {
        var result = s.Substring(0, length);
        s = s.Substring(length);
        yield return result;
    }
    yield return s;
}

Обновление:

Оценка количества символов, которые могут поместиться в TextBox с использованием шрифта фиксированной ширины:

public int GetMaxChars(TextBox tb)
{
    using (var g = CreateGraphics())
    {
        return (int)Math.Floor(tb.Width / (g.MeasureString("0123456789", tb.Font).Width / 10));
    }
}

Шрифт переменной ширины сложнее, но его можно сделать с помощью MeasureCharacterRanges.

...