2010-05-25 30 views
6

我有一個.NET應用程序,它帶有一個StatusStrip,它持有三個ToolTipStatusLabels。標籤的文本在應用程序顯示狀態時填充。在某些情況下,他們可以保留一個空文本。自動在ToolTipStatusLabel中指示截斷

當我調整窗口的大小時,ToolTipStatusLabels在StatusStrip中不適合時會隱藏。我希望在StatusStrip中無法放置標籤時將文本截斷。隱藏標籤的默認行爲使得很難區分空文本或隱藏標籤。

要指示文本被自動截斷,應該用省略號(...)表示。如何才能做到這一點?

回答

11

將標籤的Spring屬性設置爲True可以自動調整其大小。要得到省略號,您需要重寫該繪圖。爲您的項目添加一個新類並粘貼下面顯示的代碼。編譯。您將在狀態條設計器下拉列表中獲得新的SpringLabel控件。

using System; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Windows.Forms.Design; 

[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.StatusStrip)] 
public class SpringLabel : ToolStripStatusLabel { 
    public SpringLabel() { 
     this.Spring = true; 
    } 
    protected override void OnPaint(PaintEventArgs e) { 
     var flags = TextFormatFlags.Left | TextFormatFlags.EndEllipsis; 
     var bounds = new Rectangle(0, 0, this.Bounds.Width, this.Bounds.Height); 
     TextRenderer.DrawText(e.Graphics, this.Text, this.Font, bounds, this.ForeColor, flags); 
    } 
} 

如果您使用Image或TextAlign屬性,則需要做更多的工作。

+0

很好,這個類在Spring屬性設置時添加了橢圓。 但我有多個ToolStripStatusLabel(或SpringLabel現在),實際上有三個。當我調整窗口大小時,只有最後一個可見標籤應該被截斷。設置Spring屬性可以使它們全部重新調整大小。 當邊界矩形爲零時,是否有辦法捕捉調整大小事件並選擇性地設置左邊鄰居的Spring屬性? – harper 2010-05-27 07:29:42

+0

使用StatusStrip.Resize事件並自己設置標籤大小。 – 2010-05-27 10:51:29

+0

如果可以的話,我會給這個+10 – 2013-12-06 17:21:02