Bas Brekelmans's answer is very elegant in its simplicity. But, I found that for an actual application a little more is needed such as:
The class here handles these limitations: http://www.codeproject.com/Articles/31315/Getting-User-Input-With-Dialogs-Part-1
I just downloaded source and copied InputBox.cs into my project.
Surprised there isn't something even better though... My only real complaint is it caption text doesn't support newlines in it since it uses a label control.