如何自动调整标签的高度而不是宽度

时间:2011-01-12 19:15:04

标签: c# .net winforms

我有Panel我正在以编程方式创建;另外我要添加几个组件。

其中一个组件是Label,其中包含用户生成的内容。

我不知道标签应该有多高,但它确实有一个固定的宽度。

如何设置高度以便显示所有文本而不更改宽度?

4 个答案:

答案 0 :(得分:68)

只需使用AutoSize属性,将其重新设置为True

MaximumSize属性设置为,例如(60, 0),使其不能水平增长,只能垂直增长。

答案 1 :(得分:5)

使用Graphics.MeasureString

public SizeF MeasureString(
    string text,
    Font font,
    int width
)
  

width参数指定   宽度分量的最大值   返回的SizeF结构   (宽度)。如果width参数是   小于实际的宽度   string,返回的Width组件   被截断为表示的值   最大字符数   将适合指定的宽度。   为了容纳整个字符串,   返回高度组件已调整   到允许显示的值   带字符包的字符串。

换句话说,此函数可以根据字符串的宽度计算字符串的高度。

答案 2 :(得分:0)

如果您有标签并且想要控制垂直配合,则可以执行以下操作:

MyLabel.MaximumSize = new Size(MyLabel.Width, 0)
MyLabel.Height = MyLabel.PreferredHeight
MyLabel.MaximumSize = new Size(0, 0)

例如,如果容器中有可以调整大小的标签,则此选项非常有用。在这种情况下,您可以设置Anchor属性,以便标签水平调整大小而不是垂直调整大小,并且在resize事件中,您可以使用上述方法调整高度。

要避免将垂直拟合解释为新的resize事件,可以使用布尔值:

bool _inVerticalFit = false;

在resize事件中:

if (_inVerticalFit) return;
_inVerticalFit = true;
MyLabel.MaximumSize = new Size(MyLabel.Width, 0)
MyLabel.Height = MyLabel.PreferredHeight
MyLabel.MaximumSize = new Size(0, 0)
_inVerticalFit = false;

答案 3 :(得分:0)

仅自动调整高度:

  1. 将 AutoSize 设置为 True
  2. 将 AutoSize 设置为 False
  3. 设置宽度
label.AutoSize = true;
label.AutoSize = false;
label.Width = width;