2

我希望能够在 multilined 中设置行数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

4 回答 4

4

这将设置您的多行文本框的确切Width& :Height

 Size size = TextRenderer.MeasureText(textBox1.Text, textBox1.Font);
 textBox1.Width = size.Width;
 textBox1.Height = size.Height + Convert.ToInt32(textBox1.Font.Size);
于 2013-06-12T18:35:37.133 回答
3

像这样的东西应该工作:

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

这是来自C# Resize textbox to fit content

于 2013-06-12T18:16:29.577 回答
2

你正在做的应该工作,但你需要设置MinimumSize并且MaximumSize我不是 100% 肯定的,但我认为如果通过代码设置高度,这个约束仍然有效

于 2013-06-12T18:16:02.277 回答
2

Graphics.MeasureString的文档:

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

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

尝试这个:

float fontHeight;
using (var g = textBox1.CreateGraphics())
    fontHeight = g.MeasureString("W", textBox1.Font, new PointF(), StringFormat.GenericTypograpic).Height;
于 2013-06-12T18:17:31.907 回答