如下调用TextRenderer.MeasureText:
TextRenderer.MeasureText(myControl.Text, myControl.Font);
并将结果与控件的大小进行比较,以检查文本是否适合。结果有时是不正确的。已经观察到以下两个问题:
有什么方法可以提高MeasureText方法的准确性吗?我应该调用接受设备上下文和/或格式标志的替代之一吗?
最佳答案
您已经自己回答了问题。实际上是基于Win32 DrawTextEx的MeasureText,如果没有有效的设备上下文,此功能将无法使用。因此,当您调用不带hdc的MeasureText覆盖时,它将在内部创建与桌面兼容的hdc来进行测量。
当然,度量取决于其他TextFormatFlags。还请记住,标签绘画(和测量)取决于UseCompatibleTextRendering。
因此,一般的结论是您应该对自己的代码使用MeasureText,例如,当您随后使用完全相同的参数调用DrawText时,在所有其他情况下,MeasureText返回的大小不能视为精确值。
如果需要获得预期的Label大小,则应使用GetPreferredSize方法。