2010-04-13 92 views
3

如何將WordWrap = false設置爲System.Windows.Forms.Label對於標籤設置WordWrap = false

我在面板上有一個標題,它應該顯示"MyPanel capt..."。所以我用AutoEllipsis = true,但這還不夠。

我也使用「AutoSize = true」,因爲我希望標籤佔用儘可能小的空間。

Apropos,Visual Basic 6.0做到了。

+1

你想要什麼視覺效果? – 2010-04-13 14:56:08

+0

查看更新。 – serhio 2010-04-13 15:07:11

回答

1

我找到了一個解決方案:

this.label.AutoEllipsis = true; 
this.label.AutoSize = true; 

面板的事件處理程序,調整大小:

... 
textHeight = this.label.Font.SizeInPoints; // Take in pixels, not points 
... 
Size newMaxSize = new Size(this.Width, 
    textHeight + label.Padding.Top + label.Padding.Bottom); 
this.label.MaximumSize = newMaxSize; 
... 
0

我不認爲有什麼辦法可以做到這一點 - 標籤本身不是單行或多行的。這取決於標籤的Text屬性是否有任何換行符。

如果您希望它是單行,請將Text中的CRLF字符替換爲其他字符。

+0

如果我有一個沒有換行符的長詞組,它會傳遞給新行。請參閱更新中的說明。 – serhio 2010-04-13 15:09:15

+0

反過來:* [Label word wrapping](http://stackoverflow.com/questions/9509147/label-word-wrapping/10069986#10069986)* – 2016-05-10 09:46:08

1

我敢肯定你不能阻止標籤打包。一個可選的(如果稍微粗糙的話)選項是將標籤設置爲自動調整大小(因此寬度隨文本增長),然後按照z順序將一個控件放在它的前面。這樣,當標籤寬度超過某個點時,標籤重疊的內容將被該其他控件隱藏。

就像我說的,這是一個非常簡單的方法來達到這個效果。

此外,如果您嘗試使用AutoEllipsis,我假設您已禁用AutoResize?我相信它優先。

+0

不,我都用。 AutoEllipsis的最大尺寸。 Autosize爲最小的地方。 – serhio 2010-04-13 15:17:51

+0

嗯,好吧,我想AutoSize只會增加標籤的大小,以至於不再需要AutoEllipsis。 – Kazar 2010-04-13 15:27:50

+1

當標籤指示父級寬度時,需要使用AutoEllipsis。看到我的答案的伎倆。 – serhio 2010-04-13 15:30:10

3

我有一個類似的效果使用工作:

label1.AutoSize = false; 
label1.AutoEllipsis = true; 

和大小的標籤區域是在高度只有一行。

+0

我也使用「AutoSize = true」,因爲要讓標籤佔用儘可能小的空間。 – serhio 2010-04-13 15:16:26

1

嘗試設置標籤MAXIMUMSIZE屬性。

0

啊,我想我終於明白了你想要的效果。

您想要一個AutoSize最大值的標籤。達到最大值後,您想要顯示AutoEllipsis。正確?

如果是這樣,那麼您需要設置MaximumSize,AutoEllipsis和AutoSize屬性。然後標籤將盡可能小。當文本超出您指定的最大大小時,文本將被截斷並添加省略號。你不需要代碼就可以做到這一點。

+1

是的;你理解正確。但問題是設置MaxSize。家長面板是可重新設置的,所以請參閱我的答案。 – serhio 2010-04-13 15:37:11

0

我正在使用FlowLayoutPanel將標籤從左到右依次保存。所以autosize和重疊打破我很好地對齊列。我認爲最直接的方法就是自己實施繪畫。助手存在爲你做省略號。

最後一個TextFormatFlags有十幾個選項可以節省大量煩人的繪圖代碼。

private void templateLabel_Paint(object sender, PaintEventArgs e) 
    { 
     Label lbl = sender as Label; 
     e.Graphics.Clear(lbl.BackColor); 

     TextRenderer.DrawText(e.Graphics, lbl.Text, lbl.Font, 
      lbl.ClientRectangle, 
      Color.Black, 
      lbl.BackColor, TextFormatFlags.EndEllipsis); 
    }