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 计算不准确的坑的主要内容,如果未能解决你的问题,请参考以下文章

c# winform 如何做浮动窗口

如何从另一个 WinForm 中通过 C# WinForm 查看

C#中 winform程序 怎么制作纵向选项卡

C# winform 托盘图标问题?

wpf和winform(C#) 有啥区别吗

C# winform 制作圆形窗体