如何获得一个标签的换行功能的文本,这是越界?


当前回答

如果你真的想要设置标签宽度独立于内容,我发现最简单的方法是:

设置autosize为true 设置你想要的最大宽度 设置最小宽度相同

现在标签的宽度是恒定的,但是它会自动调整它的高度。

然后对于动态文本,减小字体大小。如果需要,在设置标签文本的子代码中使用这个代码段:

If Me.Size.Height - (Label12.Location.Y + Label12.Height) < 20 Then
    Dim naam As String = Label12.Font.Name
    Dim size As Single = Label12.Font.SizeInPoints - 1
    Label12.Font = New Font(naam, size)
End If

其他回答

根据@hypo的回答有更好的答案吗

public class GrowLabel : Label {
    private bool mGrowing;
    public GrowLabel() {
        this.AutoSize = false;
    }
    private void resizeLabel() {
        if (mGrowing)
            return;
        try {
            mGrowing = true;
            int width = this.Parent == null ? this.Width : this.Parent.Width;

            Size sz = new Size(this.Width, Int32.MaxValue);
            sz = TextRenderer.MeasureText(this.Text, this.Font, sz, TextFormatFlags.WordBreak);
            this.Height = sz.Height + Padding.Bottom + Padding.Top;
        } finally {
            mGrowing = false;
        }
    }
    protected override void OnTextChanged(EventArgs e) {
        base.OnTextChanged(e);
        resizeLabel();
    }
    protected override void OnFontChanged(EventArgs e) {
        base.OnFontChanged(e);
        resizeLabel();
    }
    protected override void OnSizeChanged(EventArgs e) {
        base.OnSizeChanged(e);
        resizeLabel();
    }
}

Int width = this。Parent == null ?这一点。宽度:this.Parent.Width;这允许你使用自动增长标签时停靠到一个父,例如一个面板。

这一点。高度= sz。高度+填充。Bottom + Padding.Top;这里我们关心顶部和底部的填充。

我必须找到一个快速的解决方案,所以我只是使用了一个具有这些属性的文本框:

var myLabel = new TextBox
                    {
                        Text = "xxx xxx xxx",
                        WordWrap = true,
                        AutoSize = false,
                        Enabled = false,
                        Size = new Size(60, 30),
                        BorderStyle = BorderStyle.None,
                        Multiline =  true,
                        BackColor =  container.BackColor
                    };

事实上,公认的答案是不必要的复杂。

如果您将标签设置为“自动大小”,它将随着您放入的任何文本而自动增长。(这包括垂直增长。)

如果你想让它以特定的宽度换行,你可以设置MaximumSize属性。

myLabel.MaximumSize = new Size(100, 0);
myLabel.AutoSize = true;

测试和工作。

这个问题的简单答案是改变Label的DOCK属性。默认为“NONE”。

设置AutoEllipsis属性为“TRUE”,AutoSize属性为“FALSE”。