专业手机网站公司吗,建筑工程师培训学校,做营销网站建设挣钱吗,wordpress英文主题 汉化Graphics.MeasureString 可以计算出指定字符串在给定字体Font的尺寸SizeF#xff0c;它的计算有坑#xff1a;如果把字符串拆开成一个一个单字字符串并逐个计算尺寸#xff0c;然后把Width加起来#xff0c;你会发现并不一定等于完整的字符串计算出来的Width。经过一番折腾…Graphics.MeasureString 可以计算出指定字符串在给定字体Font的尺寸SizeF它的计算有坑如果把字符串拆开成一个一个单字字符串并逐个计算尺寸然后把Width加起来你会发现并不一定等于完整的字符串计算出来的Width。经过一番折腾最终发现关键在于字符串中是否有空格。举个例子Graphics g Graphics.FromHwnd(IntPtr.Zero);string foo ab c;float totalCharWidth 0F;for (int i 0; i foo.Length; i){float charWidth g.MeasureString(foo.Substring(i, 1), SystemFonts.DefaultFont, 9999, StringFormat.GenericTypographic).Width;Console.WriteLine(string.Format(Char {0} width : {1}, foo.Substring(i, 1), charWidth));totalCharWidth charWidth;}Console.WriteLine(string.Format(Total Char Width : {0}, totalCharWidth));Console.WriteLine(string.Format(String {0} Width : {1}, foo, g.MeasureString(foo, SystemFonts.DefaultFont, 9999, StringFormat.GenericTypographic).Width));执行结果Char a width : 6Char b width : 6Char width : 0Char c width : 6Total Char Width : 18String ab c Width : 24字符串foo拆开后计算出来的Width总和为16和foo完整计算出来Width24不同关键问题显然是空格的Width居然为0。经过测试Graphics.MeasureString 计算字符串Width时会忽略掉头尾的空格后再进行计算而夹在字符串中间的空格却会纳入计算(等于帮你给字符串自动做了次.Trim()这坑是什么操作)因此单独计算空格的Width实际上计算的空字符串的Width因此为0。所以如果你希望单独得到空格的准确Width简单的方法是1.计算出a a的Width1 w12.计算出aa的Width w23.用w1 - w2就可以得到空格的Width。