2010-04-13 216 views

回答

3
class AutoFontLabel : Label 
{ 
    public AutoFontLabel() 
     : base() 
    { 
     this.AutoEllipsis = true; 
    } 

    protected override void OnPaddingChanged(EventArgs e) 
    { 
     UpdateFontSize(); 
     base.OnPaddingChanged(e); 
    } 

    protected override void OnResize(EventArgs e) 
    { 
     UpdateFontSize(); 
     base.OnResize(e); 
    } 

    private void UpdateFontSize() 
    { 
     int textHeight = this.ClientRectangle.Height 
      - this.Padding.Top - this.Padding.Bottom; 

     if (textHeight > 0) 
     { 
      this.Font = new Font(this.Font.FontFamily, 
       textHeight, GraphicsUnit.Pixel); 
     } 
    } 
} 

感謝AMissico更新控件來處理填充。我們可以看到在設計器中如何改變Padding和TextAlign。

+0

爲什麼與1f的額外乘法?演員陣容不會更快更清潔嗎? (沒關係) – AMissico 2010-04-13 11:13:18

+0

這是否會導致額外的標籤大小調整,因爲您正在更改OnResize中的字體? – AMissico 2010-04-13 11:14:11

+0

不,我試過了,不會導致額外的標籤重新顯示;基地OnResieze後設置。 – serhio 2010-04-13 11:30:29

0

我認爲你需要重寫paint方法來解決這個問題,並在你自己的文本上繪製。但是您必須使用GDI +的MeasureString方法來獲取文本的大小,因此能夠告訴您正確字體大小的例程將以試錯方式工作。

+0

我認爲寧可用label.OnResize + label.Font =東西的一個伎倆 – serhio 2010-04-13 10:28:42

相關問題