2011-11-14 109 views

回答

8

您可以嘗試覆蓋OnTextChanged事件,然後根據文本的大小更改Width

protected override OnTextChanged(EventArgs e) 
{ 
    using (Graphics g = CreateGraphics()) 
    { 
     SizeF size = g.MeasureString(Text, Font); 
     Width = (int)Math.Ceiling(size.Width); 
    } 
    base.OnTextChanged(e); 
} 
+0

我從來沒有試過這個。但它看起來很有趣 – Sandy

+0

我從來沒有在TextBox TextChanged上嘗試過它);但是當我根據內部標籤的文本調整UserControl的大小時,它適用於我。 – Connell

+0

我總是遵循上面的回答我提出的建議。我從來沒有在Override中覆蓋 – Sandy

2

試試這個,它也將工作...

這裏,我已經採取了100的文本框的最小寬度。 「txt」是TextBox。

const int width = 100; 

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    Font font = new Font(txt.Font.Name, txt.Font.Size); 

    Size s = TextRenderer.MeasureText(txt.Text, font); 
    if (s.Width > width) 
    { 
     txt.Width = s.Width; 
    } 
} 

希望它有幫助。

1

這裏是更好的解決方案。 情景是:我有一個填充窗體(用戶控件)的文本框。所以,我想改變形態高度TextBox中變線的每次數量,但其高度不大於了minHeight(恆定)

private void ExtendFormHeight() 
     { 
      int heightChanged = txtText.PreferredSize.Height - txtText.ClientSize.Height; 
      if (Height + heightChanged > MinHeight) 
      { 
       Height += heightChanged; 
      } 
      else 
      { 
       Height = MinHeight; 
      } 
     } 

希望這有助於少!

相關問題