我正在使用TextRendere.MeasureText而不是Graphics.MeasureString,因为它允许我指定TextFormatFlags.NoPadding,但它的返回宽度是几个像素到宽。对于四个字符的文本字符串,其上面有五个像素,对于五个字符的文本字符串,它的六个像素。我确信使用更长的文本字符串会更多。我正在使用.Net 4.5.1。这是我的代码:
Size size = TextRenderer.MeasureText(items[a], new Font("Segoe UI", 12, GraphicsUnit.Pixel), new Size(Width, 15), TextFormatFlags.NoPadding);
如何获得准确的(+ - 1 / 2px确定)文字宽度?谢谢:D
答案 0 :(得分:1)
与流行的相信相反Graphics.MeasureString
是测量短字符串而不获得额外空间的更好选择。
您需要使用StringFormat GenericTypographic
:
SizeF stringSize = new SizeF();
stringSize = e.Graphics.MeasureString(items[a],
new Font("Segoe UI", 12, GraphicsUnit.Pixel),
new SizeF(Width, 15f),
StringFormat.GenericTypographic);
以下是MSDN的引用:
MeasureString方法设计用于单个字符串 并包括字符串前后的少量额外空间 允许悬垂的字形。此外,DrawString方法调整 字形指向优化显示质量并可能显示字符串 比MeasureString报告的要窄。获得适合的指标 对于布局中的相邻字符串(例如,实现时) 格式化文本),使用MeasureCharacterRanges方法或其中之一 MeasureString方法,它接受StringFormat并传递 GenericTypographic。另外,请确保TextRenderingHint 图形是AntiAlias。
如果您打算添加尺寸,我还建议使用SizeF。