如下调用TextRenderer.MeasureText:

TextRenderer.MeasureText(myControl.Text, myControl.Font);

并将结果与​​控件的大小进行比较,以检查文本是否适合。结果有时是不正确的。已经观察到以下两个问题:
  • 通常,当Label设置为AutoSize时,TextRenderer会报告一个宽度,该宽度比Control的自动调整宽度大1个像素。
  • 否定的,其中TextRenderer报告的宽度小于控件的宽度,但文本仍被截断。这与“Estaciónde trabajo”一起发生-不知道该重音是否会以某种方式影响宽度计算?

  • 有什么方法可以提高MeasureText方法的准确性吗?我应该调用接受设备上下文和/或格式标志的替代之一吗?

    最佳答案



    您已经自己回答了问题。实际上是基于Win32 DrawTextEx的MeasureText,如果没有有效的设备上下文,此功能将无法使用。因此,当您调用不带hdc的MeasureText覆盖时,它将在内部创建与桌面兼容的hdc来进行测量。

    当然,度量取决于其他TextFormatFlags。还请记住,标签绘画(和测量)取决于UseCompatibleTextRendering

    因此,一般的结论是您应该对自己的代码使用MeasureText,例如,当您随后使用完全相同的参数调用DrawText时,在所有其他情况下,MeasureText返回的大小不能视为精确值。

    如果需要获得预期的Label大小,则应使用GetPreferredSize方法。

    10-08 09:28