2012-03-01 83 views
43

有没有办法在.NET标签控件中做文字包装?标签文字包装

我知道有使用TextBox的另一种方式,使财产边框无法比拟的,财产只读为真,并设置属性自动换行和财产多行为true。

是否有某种标签?

+0

我不认为有,但自从我做了WinForms以来已经有一段时间了。 – 2012-03-01 00:58:37

回答

19

参照Automatically Wrap Text in Label。它描述了如何创建自己的成长标签。

下面是从上述基准进行的完整来源:

using System; 
using System.Text; 
using System.Drawing; 
using System.Windows.Forms; 

public class GrowLabel : Label { 
    private bool mGrowing; 
    public GrowLabel() { 
    this.AutoSize = false; 
    } 
    private void resizeLabel() { 
    if (mGrowing) return; 
    try { 
     mGrowing = true; 
     Size sz = new Size(this.Width, Int32.MaxValue); 
     sz = TextRenderer.MeasureText(this.Text, this.Font, sz, TextFormatFlags.WordBreak); 
     this.Height = sz.Height; 
    } 
    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(); 
    } 
} 
+0

我想添加一个新的属性到现有的标签,像AutoSize,就像IsWordWrap = true。有什么想法吗?所以我可以给 LabelName。IsWordWrap = TRUE; – Sharpeye500 2012-03-01 01:22:38

+0

在我的情况TextRenderer.MeasureText给出了错误的大小。为了使所有东西都完美,你还需要重写OnPaint并绘制如下的文本:'TextRenderer.DrawText(e.Graphics,this.Text,this.Font,new Rectangle(0,0,this.Width,Int32.MaxValue),ForeColor, TextFormatFlags.WordBreak);' – user1561713 2016-11-09 14:20:16

132

更改您的最大尺寸,

label1.MaximumSize = new Size(100, 0); 

并设置自动调整为true。

label1.AutoSize = true; 

就是这样!

+1

您也可能需要使用System.Drawing;'。 – Appulus 2014-12-13 13:48:57

+6

这应该是公认的答案 – Nissim 2015-02-24 14:45:31

+0

同意,这是最好的和更容易实现的答案,只是测试它,并完美的作品 – nizx 2015-06-17 17:08:35

15

讽刺的是,将其设置为false关闭AutoSize让我获得标签控件的尺寸大小它既垂直和水平,有效地允许发生自动换行。

28

只需将Label AutoSize属性设置为False。然后文本将被包裹,您可以手动重新调整控件的大小以显示文本。

3

如果你想要一些动态调整大小与字包装标签相结合,你可以做到以下几点:

  1. 把标签在面板内部
  2. 处理好ClientSizeChanged event的面板,使得 标签填补空间:

    private void Panel2_ClientSizeChanged(object sender, EventArgs e) 
    { 
        label1.MaximumSize = new Size((sender as Control).ClientSize.Width - label1.Left, 10000); 
    } 
    
  3. 套装Auto-Size的标签true

  4. 设置Dock的标签Fill
4

如果您打开Visual Studio中的Text财产的下拉菜单中,你可以使用回车键分割线。这显然只适用于静态文本,除非您知道动态文本的最大尺寸。

+0

谢谢!这正是我所寻找的(如何在设计师中分割线条)。 – ehambright 2016-02-25 18:59:26

+0

堆更好的答案! – 2016-09-05 00:39:50

-2

您可以使用TextBox并将multiline设置为truecanEditfalse

+0

multiline和canEdit不是TextBox上的实际属性。 – 2016-09-21 15:17:34