我有一个小表单,显示一些进度信息。
很少我需要显示相当长的消息,我希望能够在需要时调整此表单的大小,以便此消息适合表单。
那么如何找出字体S
中呈现的字符串F
的宽度?
答案 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)
答案 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函数的等效函数。