Just to throw in a solution that I did that uses multiline labels
I wanted to create a replacement for MessageBox.Show for errors that had extra features such as "save to file"
In VS 2005 (VB.NET) I created a new dialog form
I added a single label and I added/replaced the actions in the TableLayoutPanel
To make the label act like messagebox text and the form grow like messagebox I did the following
autosize = true
maximumsize = some reasonable size
The result is the label will grow in height AND it will word wrap based on maximum width
Then for the form, on form_load I put logic to calculate the new height and width and did a size
For the width I used some logic on found on the web (I'm not sure this is the best way but it seemed to make sense) - for the height I simply added the height of the label to the dialog height
Here is some psudeo code...
textFont As Font = lblMessage.Font
'Specify a fixed width, but let the height be "unlimited"
Dim layoutSize As SizeF = New SizeF(lblMessage.Width, 5000.0F)
Dim g As Graphics = Graphics.FromHwnd(lblMessage.Handle)
Dim stringSize As SizeF = g.MeasureString(Text, textFont, layoutSize)
(layoutSize.Width + iSomeAdditionalSpace) > iCurrentDialogWidth Then
newwidth = layoutSize.Width +
Me.PictureBox1.Width + iSomeAdditionalSpace
newheight = Me.Height + lblMessage.Height
Me.Size = New Size(newwidth, newheight)