我正在尝试在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之前也会出现换行。
使用等宽字体不是一种选择。
答案 0 :(得分:2)
您可以尝试使用Zero width space
textbox.Text.Replace(" ","·\u200B")
它应该仍然允许换行但看起来不像任何东西。退格/删除似乎表现得很奇怪,因此您可能需要确认您要删除表示零宽度空间的.
(反之亦然),并且知道只需按一下键就可以删除这两个字符。
答案 1 :(得分:0)
Graphics.MeasureString()
方法在设计上不准确。有关替代方案,请参阅MSDN Library page上的备注部分。