如何使用C#在MultiLine TextBox中获取LineHeight / FontHeight?

时间:2016-06-17 12:21:02

标签: c# .net winforms visual-studio fonts

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

enter image description here

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

2 个答案:

答案 0 :(得分:3)

要衡量文字,请使用TextRender.MeasureText

如果您对宽度不感兴趣,可以用非常简单的方式调用该函数:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1 id="test"></h1>

正如你所说,如果每一行使用相同的字体(就像TextBox一样),那么每一行都会有相同的高度,所以你可以将高度乘以行数。

但您也可以使用int textHeight; using (Graphics g = textBox1.CreateGraphics()) { textHeight = TextRenderer.MeasureText(g, textBox1.Text, textBox1.Font).Height; } 来确定显示文本所需的宽度和高度。例如:

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); } 方法可以做一些非常类似的事情。但是不要使用它。它测量字符串就好像它是由GDI +绘制的,但内置的控件所有人都使用GDI绘制文本,因此需要Graphics.MeasureString。)

答案 1 :(得分:-2)

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

int lineHeight;
using (Graphics g = textBox1.CreateGraphics())
{
    lineHeight = Convert.ToInt32(g.MeasureString("A", textBox1.Font).Height);
}