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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#:Multiline TextBox with TextBox.WordWrap显示长Base64字符串相关的知识,希望对你有一定的参考价值。

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

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

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

答案

智能包装太聪明,适合您的目的。只要保持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完成。

以上是关于C#:Multiline TextBox with TextBox.WordWrap显示长Base64字符串的主要内容,如果未能解决你的问题,请参考以下文章

C#Multiline Textbox:如果包含X,则在行之后添加一个字符串

winform 中 textbox multiline=true的时候,让文本垂直居中,求确实可行的解决方案

easyui TextBox 换行怎么办。data-options="multiline:true"不起作用

C#winform中怎么修改textbox的高度,解决立刻给分)

VB中textbox用回车触发事件后文本框为啥会转到下一行

怎样在winform中控制textbox的大小