C# で InputBox

負けた気分になりながら Microsoft.VisualBasic.Interaction.InputBox を使ってみたら、キャンセルボタンを押した場合と空文字列を入力した場合の区別がつかなくて絶望した!
しかし、こういうコードを書くと with が欲しくなるね.

public static string InputBox(string Prompt, string Title, string DefaultResponse) {
    var textBox = new TextBox();
    textBox.Location = new Point(12, 84);
    textBox.Size = new Size(329, 19);
    textBox.Text = DefaultResponse;

    var okButton = new Button();
    okButton.DialogResult = DialogResult.OK;
    okButton.Location = new Point(266, 9);
    okButton.Size = new Size(75, 23);
    okButton.Text = "OK";
    okButton.UseVisualStyleBackColor = true;

    var cancelButton = new Button();
    cancelButton.DialogResult = DialogResult.Cancel;
    cancelButton.Location = new Point(266, 38);
    cancelButton.Size = new Size(75, 23);
    cancelButton.Text = "キャンセル";
    cancelButton.UseVisualStyleBackColor = true;

    var label = new Label();
    label.AutoSize = true;
    label.Location = new Point(12, 9);
    label.Size = new Size(0, 12);
    label.Text = Prompt;

    var form = new Form();
    form.SuspendLayout();
    form.AcceptButton = okButton;
    form.CancelButton = cancelButton;
    form.AutoScaleDimensions = new SizeF(6F, 12F);
    form.AutoScaleMode = AutoScaleMode.Font;
    form.ClientSize = new Size(353, 120);
    form.ControlBox = false;
    form.Controls.Add(textBox);
    form.Controls.Add(okButton);
    form.Controls.Add(cancelButton);
    form.Controls.Add(label);
    form.FormBorderStyle = FormBorderStyle.FixedDialog;
    form.ShowInTaskbar = false;
    form.StartPosition = FormStartPosition.CenterParent;
    form.ResumeLayout(false);
    form.PerformLayout();
    form.Text = Title;

    if (form.ShowDialog() == DialogResult.OK) return textBox.Text;
    else return null;
}