TextRenderer
использует GDI для визуализации текста, тогда как Graphics
использует GDI +. Оба используют немного другой метод для разметки текста, поэтому размеры отличаются.
Какой из них использовать, зависит от того, что в итоге будет использовано для рисования текста. Если вы рисуете его с GDI + Graphics.DrawString
, измерьте с помощью Graphics.MeasureString
. Если вы рисуете с использованием GDI TextRenderer.DrawText
, измерьте с помощью TextRenderer.MeasureText
.
Если текст будет отображаться в элементе управления Windows Forms, он использует TextRenderer
, если для UseCompatibleTextRendering
установлено значение false
(по умолчанию).
Читая между строк вашего вопроса, вы, кажется, используете TextRenderer
, потому что у вас нет экземпляра Graphics
вне события Paint
. Если это так, вы можете создать его самостоятельно для измерения:
using( Graphics g = someControl.CreateGraphics() )
{
SizeF size = g.MeasureString("some text", SystemFonts.DefaultFont);
}
Если у вас нет доступа к элементу управления для создания графического экземпляра, вы можете использовать его для создания экземпляра для экрана, который отлично работает для целей измерения.
using( Graphics g = Graphics.FromHwnd(IntPtr.Zero) )
{
SizeF size = g.MeasureString("some text", SystemFonts.DefaultFont);
}