在winforms文本框中显示不可打印的字符

时间:2012-11-09 13:51:06

标签: c# textbox character

我正在尝试在winforms多行文本框中显示不可打印的字符(空格,换行符),这是大多数文本处理工具中的一项功能。

我是通过

来做的
textbox.Text.Replace(' ','·').Replace(Environment.NewLine, "¶" + Environment.NewLine);

到目前为止这个工作正常,但由于缺少空格,自动自动换行不再起作用。 所以我尝试测量每一行的长度来手动添加自动换行,但我没有得到预期的结果:

private int GetTextWidth(TextBox tb)
{
    using (var g = textBox1.CreateGraphics())
    {
        SizeF size = g.MeasureString(tb.Text, tb.Font);
        int width = (int)(size.Width + 0.5);
        return width;
    }
}

GetTextWidth为不同的字符返回不同的结果。当我输入一行“l”时,GetTextWidth == textbox.Width将在~80%之后达到,“M”即使在GetTextWidth == textbox.Width之前也会出现换行。

使用等宽字体不是一种选择。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用Zero width space

textbox.Text.Replace(" ","·\u200B")

它应该仍然允许换行但看起来不像任何东西。退格/删除似乎表现得很奇怪,因此您可能需要确认您要删除表示零宽度空间的.(反之亦然),并且知道只需按一下键就可以删除这两个字符。

答案 1 :(得分:0)

Graphics.MeasureString()方法在设计上不准确。有关替代方案,请参阅MSDN Library page上的备注部分。