2012-03-01 79 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