如何确定给定字体的字符串的大小

时间:2009-04-06 12:14:46

标签: c# .net winforms fonts

我有一个小表单,显示一些进度信息。
很少我需要显示相当长的消息,我希望能够在需要时调整此表单的大小,以便此消息适合表单。

那么如何找出字体S中呈现的字符串F的宽度?

4 个答案:

答案 0 :(得分:19)

这取决于正在使用的渲染引擎。您基本上可以在GDI和GDI +之间切换。可以通过相应地设置UseCompatibleTextRendering属性来完成切换

使用GDI +时,您应该使用MeasureString

string s = "A sample string";

SizeF size = e.Graphics.MeasureString(s, new Font("Arial", 24));

使用GDI(即原生Win32渲染)时,您应该使用TextRenderer类:

SizeF size = TextRenderer.MeasureText(s, new Font("Arial", 24));

请参阅此文章:Text Rendering: Build World-Ready Apps Using Complex Scripts In Windows Forms Controls

答案 1 :(得分:5)

这个怎么样:

Size stringsize = graphics.MeasureString("hello", myFont);

Here是MSDN链接。)

答案 2 :(得分:1)

对于这个答案,我使用了一个辅助函数:

private static double ComputeSizeOfString(string text, string fontFamily, double fontSize)
{
      System.Drawing.Font font = new(fontFamily,  (float)fontSize);
      System.Drawing.Image fakeImage = new System.Drawing.Bitmap(1, 1);
      System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(fakeImage);
      return graphics.MeasureString(text, font).Width;
}

所以基本上该方法使用尺寸为 (1,1) 的 fakeimage 来计算字符串的长度,在这种情况下,是根据您选择的文本创建的图像的宽度。

一个如何使用它的例子最终是这样的:

string myTxt = "Hi there";
double szs = ComputeSizeOfString(myTxt, "Georgia", 14);

答案 3 :(得分:0)

回到Win32,我使用VisualStyleRenderer :: GetTextExtent函数的等效函数。