Aid*_*yan 4 c# textrenderer winforms
调用TextRenderer.MeasureText如下:
TextRenderer.MeasureText(myControl.Text, myControl.Font);
Run Code Online (Sandbox Code Playgroud)
并将结果与控件的大小进行比较,以检查文本是否适合.结果有时是不正确的.观察了以下两个问题:
有没有办法提高MeasureText方法的准确性?我应该调用接受设备上下文和/或格式标志的覆盖之一吗?
小智 8
我知道这可能不再实际了.然而,对于未来的读者来说,这是一种在控件中测量文本的简单而准确的方法:
Graphics g=Graphics.FromHwnd(YOUR CONTROL HERE.Handle);
SizeF s=g.MeasureString("YOUR STRING HERE", Font, NULL, NULL, STRING LENGTH HERE, 1)
Run Code Online (Sandbox Code Playgroud)
有什么方法可以提高MeasureText方法的准确性吗?我应该调用接受设备上下文和/或格式标志的替代之一吗?
您已经自己回答了问题。实际上是基于Win32 DrawTextEx的MeasureText,如果没有有效的设备上下文,此功能将无法使用。因此,当您调用不带hdc的MeasureText覆盖时,它将在内部创建与桌面兼容的hdc来进行测量。
当然,度量取决于其他TextFormatFlags。另外请记住,标签绘画(和度量)取决于UseCompatibleTextRendering。
因此,一般的结论是您应该对自己的代码使用MeasureText,例如,当您随后使用完全相同的参数调用DrawText时,在所有其他情况下,MeasureText返回的大小不能视为精确值。
如果需要获取预期的Label大小,则应使用GetPreferredSize方法。