这不是一个四舍五入的问题.差异~5 +像素.
测试用例字符串:""MACD(26,12,9)-0.000016"
e.Graphics.MeasureString("MACD (26,12,9) -0.000016", SystemFonts.DefaultFont).Width)
TextRenderer.MeasureText("MACD (26,12,9) -0.000016", SystemFonts.DefaultFont).Width)
Run Code Online (Sandbox Code Playgroud)
结果总是:
139.3942
134
Run Code Online (Sandbox Code Playgroud)
为什么尺寸差异如此之大?我只需要在外面绘制圆形宽度的方法.但它应该与MeasureString匹配,反之亦然.
Sve*_*ven 58
TextRenderer使用GDI渲染文本,而Graphics使用GDI +.两者使用略有不同的方法来布局文本,因此尺寸不同.
您应该使用哪一个取决于最终用于实际绘制文本的内容.如果您使用GDI +绘图Graphics.DrawString,请使用Graphics.MeasureString.如果您使用GDI绘图TextRenderer.DrawText,请使用TextRenderer.MeasureText.
如果文本将显示在Windows窗体控件中,则使用TextRendererif UseCompatibleTextRendering设置为false(这是默认值).
在您的问题的行之间阅读,您似乎正在使用,TextRenderer因为您Graphics在Paint事件之外没有实例.如果是这种情况,您可以自己创建一个来进行测量:
using( Graphics g = someControl.CreateGraphics() )
{
SizeF size = g.MeasureString("some text", SystemFonts.DefaultFont);
}
Run Code Online (Sandbox Code Playgroud)
如果您无权访问控件以创建图形实例,则可以使用此操作为屏幕创建一个控件,该工具可用于测量目的.
using( Graphics g = Graphics.FromHwnd(IntPtr.Zero) )
{
SizeF size = g.MeasureString("some text", SystemFonts.DefaultFont);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32175 次 |
| 最近记录: |