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

发布于 2024-07-16 08:41:27 字数 141 浏览 3 评论 0原文

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

那么我如何知道在字体 F 中渲染的字符串 S 有多宽呢?

I have a small form that displays some progress information.

Very rarely I have to show a rather long message and I want to be able to resize this form when needed so that this message fits in the form.

So how do I find out how wide string S will be rendered in font F?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

葬花如无物 2024-07-23 08:41:27

这取决于所使用的渲染引擎。 您基本上可以在 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));

请参阅本文:文本渲染:在 Windows 窗体控件中使用复杂脚本构建全球可用的应用程序< /a>

It depends on the rendering engine being used. You can basically switch between GDI and GDI+. Switching can be done by setting the UseCompatibleTextRendering property accordingly

When using GDI+ you should use MeasureString:

string s = "A sample string";

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

When using GDI (i.e. the native Win32 rendering) you should use the TextRenderer class:

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

See this article: Text Rendering: Build World-Ready Apps Using Complex Scripts In Windows Forms Controls

定格我的天空 2024-07-23 08:41:27

怎么样:(

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

这里是MSDN链接.)

How about this:

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

(Here is the MSDN link.)

药祭#氼 2024-07-23 08:41:27

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

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);

For this answer I use a helper function:

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;
}

So basically the method uses a fakeimage with dimensions (1,1) to compute the length of the string, in this case the width of the image created from your chosen text.

An example of how to use it ends up like this:

string myTxt = "Hi there";
double szs = ComputeSizeOfString(myTxt, "Georgia", 14);
月隐月明月朦胧 2024-07-23 08:41:27

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

Back in the Win32 I was using the equivalent for VisualStyleRenderer::GetTextExtent function for this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文