我有一些具有多行功能且字体大小不同的文本框。现在我想知道这个文本框文本的行高,因为它是一个简单的文本框,因此整个文本框的每个行高都相同,因为它不是 RichTextBox。
那么我们可以通过C#编程将其获取到变量中吗?您可以查看屏幕截图以获取更多信息。
TextRender.MeasureText
。
如果您对宽度不感兴趣,您可以通过非常简单的方式调用该函数:
int textHeight;
using (Graphics g = textBox1.CreateGraphics())
{
textHeight = TextRenderer.MeasureText(g, textBox1.Text, textBox1.Font).Height;
}
正如您所说,如果每行都使用相同的字体(就像 TextBox 一样),那么每行将具有相同的高度,因此您只需将高度乘以行数即可。
但您也可以使用
TextRenderer.MeasureText
来确定显示文本所需的宽度和高度。例如:
Size szText;
using (Graphics g = textBox1.CreateGraphics())
{
szText = TextRenderer.MeasureText(g,
textBox1.Text,
textBox1.Font,
textBox1.ClientSize,
TextFormatFlags.Left
| TextFormatFlags.Top
| TextFormatFlags.NoPrefix
| TextFormatFlags.TextBoxControl);
}
(还有一个
Graphics.MeasureString
方法做的事情非常相似。但是不要使用它。它测量字符串,就好像它是由 GDI+ 绘制的一样,但是内置控件都使用 GDI 来绘制它们的文本,所以你需要TextRenderer.MeasureText
。)
Size NewLinecharSize = TextRenderer.MeasureText(' '.ToString(), 字体);这是完整的行高,这意味着您在其上书写的行和下一行的高度,例如在字体 Tahoma 中,8pt 结果将是 = 26
如果您只想测量线高,您可以使用 大小 charSize = TextRenderer.MeasureText('A'.ToString(), Font); 结果将是 = 13
或 使用 直接 Font.Height 会得到相同的结果 = 13
感谢您的有用回复@CodyGray,最后我通过对您的代码进行少量编辑(如下所示)得到了我想要的答案,并且它运行完美。
int lineHeight;
using (Graphics g = textBox1.CreateGraphics())
{
lineHeight = Convert.ToInt32(g.MeasureString("A", textBox1.Font).Height);
}