C#:Multiline TextBox with TextBox.WordWrap显示长Base64字符串

Pet*_*Lee 9 c# base64 textbox word-wrap

我有一个文本框来显示一个很长的Base64字符串.的TextBox.Multline = trueTextBox.WordWrap = true.

问题是由TextBox本身的自动字边界检测引起的.Base64字符串的'+'是Base64编码的64个字符之一.因此,TextBox会将其包装在'+'字符处,这不是我想要的(因为使用可能会认为'+'字符周围有换行符).

我只想在TextBox中以Mulitline模式显示我的Base64字符串,但是没有字边界检测,也就是说,如果TextBox.Width只能包含80个字符,那么每行除了最后一行之外应该有80个字符.

Ric*_*key 2

智能包裹对于您的目的来说太智能了。只需保留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;
}
Run Code Online (Sandbox Code Playgroud)

更新:

TextBox使用固定宽度字体可以容纳的字符数估计为:

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

可变宽度字体比较困难,但可以使用MeasureCharacterRanges.