看了国内外各种资料、文档,测试了多种代码后,终于得到结论,虽然也不敢相信,但事实如此
测试代码如下:
都是给一个textbox注册textChange事件,在手工输入后,实时计算字符串的显示宽度,然后改变上面的一个textbox的size,从而直观显示
方法1:
[C#] 纯文本查看 复制代码 private void richTextBox1_TextChanged(object sender, EventArgs e)
{
string text = richTextBox1.Text;
Graphics graphics = richTextBox1.CreateGraphics();
StringFormat sf = StringFormat.GenericTypographic;
sf.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces;
float width = graphics.MeasureString(text, richTextBox1.Font, PointF.Empty, sf).Width;
textBox2.Width = (int)width;
}
结果如下:一开始输入时,还能大差不差一致的。越输入越多,然后差的越来越远
方法2:
[C#] 纯文本查看 复制代码 private void richTextBox1_TextChanged(object sender, EventArgs e)
{
string text = richTextBox1.Text;
GraphicsPath path = new GraphicsPath();
path.AddString(text, richTextBox1.Font.FontFamily, (int)richTextBox1.Font.Style, richTextBox1.Font.Size, new Point(0, 0), StringFormat.GenericTypographic);
RectangleF rectangeF = path.GetBounds();
textBox2.Width = (int)rectangeF.Width;
}
也是一开始输入时,还能大差不差一致的。越输入越多,然后差的越来越远
——————————————————————————————————————————————————
其中第一种方法是算出来的比实际大,第二种是算出来比实际小
但总之都是bug
C# 就没有能正确计算显示width的方法,绝望。。。。。无语 |