C# WinForm,Graphics.MeasureString 计算不准确的坑
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# WinForm,Graphics.MeasureString 计算不准确的坑相关的知识,希望对你有一定的参考价值。
参考技术A Graphics.MeasureString 可以计算出指定字符串在给定字体 Font 的尺寸 SizeF ,它的计算有坑:如果把字符串拆开成一个一个单字字符串并逐个计算尺寸,然后把 Width 加起来,你会发现并不一定等于完整的字符串计算出来的 Width 。经过一番折腾,最终发现关键在于字符串中是否有空格。
举个例子
执行结果
字符串 foo 拆开后计算出来的 Width 总和为16,和 foo 完整计算出来 Width 24不同,关键问题显然是空格的 Width 居然为0。
经过测试, Graphics.MeasureString 计算字符串 Width 时会忽略掉头尾的空格后再进行计算,而夹在字符串中间的空格却会纳入计算(等于帮你给字符串自动做了次 .Trim() ,这坑是什么操作?),因此单独计算空格的 Width 实际上计算的空字符串的 Width ,因此为0。
所以,如果你希望单独得到空格的准确 Width ,简单的方法是:
1.计算出"a a"的 Width1 => w1;
2.计算出"aa"的 Width => w2;
3.用w1 - w2,就可以得到空格的 Width 。
以上是关于C# WinForm,Graphics.MeasureString 计算不准确的坑的主要内容,如果未能解决你的问题,请参考以下文章