.NET Multiline TextBox - 设置行数

时间:2013-06-12 18:12:06

标签: c# .net winforms textbox

我希望能够设置多行TextBox中的行数。

我尝试了以下内容:

int initHeight = textBox1.Height;
textBox1.Height = initHeight * numOfLines;

但是当numOfLines变大时,这会使它太大。所以我试过这个:

float fontHeight = textBox1.CreateGraphics().MeasureString("W", textBox1.Font).Height;
textBox1.Height = fontHeight * numOfLines;

但是numOfLines很小时太小了,numOfLines很大时太大了。

所以我做错了......有什么想法吗?

4 个答案:

答案 0 :(得分:4)

这会设置准确的Width&您的多行文本框的Height

 Size size = TextRenderer.MeasureText(textBox1.Text, textBox1.Font);
 textBox1.Width = size.Width;
 textBox1.Height = size.Height + Convert.ToInt32(textBox1.Font.Size);

答案 1 :(得分:3)

这样的事情应该有效:

Size size = TextRenderer.MeasureText(textBox1.Text, textBox1.Font);
textBox1.Width = size.Width;
textBox1.Height = size.Height;

这来自C# Resize textbox to fit content

答案 2 :(得分:2)

你在做什么应该有效,但是你需要设置MinimumSizeMaximumSize我不是100%肯定,但我认为如果通过代码设置高度,这个约束仍将成立

答案 3 :(得分:2)

来自Graphics.MeasureString的文档:

  

要获取适合布局中相邻字符串的度量标准(例如,在实现格式化文本时),请使用MeasureCharacterRanges方法或采用StringFormat的MeasureString方法之一,并传递GenericTypographic。另外,请确保Graphics的TextRenderingHint是AntiAlias。

因此,您应该使用其中一个重载,例如this one,它们允许您指定StringFormat.GenericTypograpic以获得所需的大小。

试试这个:

float fontHeight;
using (var g = textBox1.CreateGraphics())
    fontHeight = g.MeasureString("W", textBox1.Font, new PointF(), StringFormat.GenericTypograpic).Height;