【问题标题】:.NET Multiline TextBox - Set number of lines.NET 多行文本框 - 设置行数
【发布时间】:2013-06-12 18:12:05
【问题描述】:

我希望能够设置多行 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 很大的时候这个就太大了。

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

【问题讨论】:

  • 这些行实际上是由控件中允许的字符数控制的。在文本框的属性中检查 MaxLength

标签: c# .net winforms textbox


【解决方案1】:

这将设置您的多行文本框的确切 WidthHeight

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

【讨论】:

  • 那么为什么我需要添加字体大小?
  • 添加字体大小设置文本框高度,否则最后一行永远不会正确可见。
【解决方案2】:

这样的事情应该可以工作:

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

这是来自C# Resize textbox to fit content

【讨论】:

  • 这似乎不太好用。它只是一点点。
【解决方案3】:

您所做的应该可以工作,但是您需要设置MinimumSizeMaximumSize 我不是 100% 肯定的,但我认为如果通过代码设置高度,这个约束仍然有效

【讨论】:

    【解决方案4】:

    来自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;
    

    【讨论】:

    • 虽然这似乎给出了更准确的结果...看起来无论如何都需要四舍五入...
    • @Andrew 它不应该-那里还有其他 cmets,例如确保将图形设置为 AniAlias 等。如果这样做,理论上你应该得到正确的高度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2019-08-16
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多