WinForm Label自动换行
AutoSize=false时会自动换行,但超出范围的不显示
AutoSize=true时不会自动换行,超出范围的也看不到
可以使用TextBox的自动换行特性来获取需要的合适的大小


//构造函数里或初始化控件的地方
_textbox = new TextBox {
//设置TextBox允许的最大宽度
MaximumSize = new Size(315, 0),
Multiline = true,
WordWrap = true,
Visible = false,
};
Controls.Add(_textbox);
lblMessage.TextChanged += LblMessage_TextChanged;
//在给Label控件赋值的地方
_textbox.Text = message;
lblMessage.Text = message;
private void LblMessage_TextChanged(object sender, EventArgs e)
{
//获取TextBox的首选大小,系统推荐的
var newSize = _textbox.PreferredSize;
//如果新的高度高于默认窗体高度内Label能显示的最高高度就改变窗体高度
//同步修改Label的宽高
if (newSize.Height > 80)
{
Height += newSize.Height - 80;
lblMessage.AutoSize = false;
lblMessage.Width = newSize.Width;
lblMessage.Height = newSize.Height;
}
//Label居中显示
lblMessage.Location = new Point(lblMessage.Location.X, (Height - lblMessage.Height - CaptionHeight)/2 + 5);
}

