我正在尝试在 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”sa 换行符甚至在 GetTextWidth == textbox.Width 之前发生。
使用等宽字体不是一种选择。