如何使用C#获取多行文本框中的LineHeight/FontHeight?

问题描述 投票:0回答:3

我有一些具有多行功能且字体大小不同的文本框。现在我想知道这个文本框文本的行高,因为它是一个简单的文本框,因此整个文本框的每个行高都相同,因为它不是 RichTextBox。

enter image description here

那么我们可以通过C#编程将其获取到变量中吗?您可以查看屏幕截图以获取更多信息。

c# .net winforms visual-studio fonts
3个回答
5
投票

要测量文本,请使用

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


0
投票

Size NewLinecharSize = TextRenderer.MeasureText(' '.ToString(), 字体);这是完整的行高,这意味着您在其上书写的行和下一行的高度,例如在字体 Tahoma 中,8pt 结果将是 = 26

如果您只想测量线高,您可以使用 大小 charSize = TextRenderer.MeasureText('A'.ToString(), Font); 结果将是 = 13

或 使用 直接 Font.Height 会得到相同的结果 = 13


-2
投票

感谢您的有用回复@CodyGray,最后我通过对您的代码进行少量编辑(如下所示)得到了我想要的答案,并且它运行完美。

int lineHeight;
using (Graphics g = textBox1.CreateGraphics())
{
    lineHeight = Convert.ToInt32(g.MeasureString("A", textBox1.Font).Height);
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.