我希望能够设置多行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
很大时太大了。
所以我做错了......有什么想法吗?
答案 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;
答案 2 :(得分:2)
你在做什么应该有效,但是你需要设置MinimumSize
和MaximumSize
我不是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;