C#のWinFormsで文字入力ダイアログボックスを作る

C# コンピュータ
C#

文字入力用のダイアログボックスがあると便利なのですが、調べたところ自前でコードを書く必要があるようです。

サンプルソース

namespace TextInputDialog;

public partial class Form1 : Form
{
    static DialogResult ShowTextInputDialog(ref string text, string prompt = "プロンプト", string title = "タイトル" )
    {
        var frm = new Form
        {
            FormBorderStyle = FormBorderStyle.FixedDialog,
            ClientSize = new Size(300, 200),
            Text = title,
        };
        var lbl = new Label
        {
            Size = new Size(200, 60),
            Location = new Point(10, 30),
            Text = prompt,
        };
        frm.Controls.Add(lbl);
        var tb = new TextBox
        {
            Size = new Size(200, 60),
            Location = new Point(10, 90),
            Text = text,
        };
        frm.Controls.Add(tb);
        
        var okBtn = new Button
        {
            Size = new Size(60, 60),
            Location = new Point(60, 120),
            Text = "OK",
            DialogResult = DialogResult.OK,
        };
        frm.Controls.Add(okBtn);
        
        var calcelBtn = new Button
        {
            Size = new Size(50, 60),
            Location = new Point(120, 120),
            Text = "Cancel",
            DialogResult = DialogResult.Cancel,
        };
        frm.Controls.Add(calcelBtn);

        frm.AcceptButton = okBtn;
        frm.CancelButton = calcelBtn;

        var result = frm.ShowDialog();
        if (result == DialogResult.OK)
        {
            text = tb.Text;
        }

        return result;
    }
    public Form1()
    {
        InitializeComponent();

        string text = "元の文章";

        var btn = new Button
        {
            Width = 60,
            Height = 40,
            Location = new Point(50, 50),
            Text = "編集"
        };
        Controls.Add(btn);


        var lbl = new Label
        {
            Width = 200,
            Height = 40,
            Location = new Point(50, 120),
            Text = text,
        };
        Controls.Add(lbl);

        btn.Click += (s, e) =>
        {
            var result = ShowTextInputDialog(ref text);
            if (result == DialogResult.OK)
            {
                lbl.Text = text;
            }
        };
    }
}

実行


「編集」ボタンを押します。

文字入力用のダイアログボックスが表示されます。

編集後「OK」ボタンでダイアログボックスを閉じます。編集した文字列がラベルの文字列に反映しています。

感想

AcceptButtonとCancelButtonにOKとCancelボタンを紐づけ、OKとCancelボタンのDialogプロパティにDialog.OKやDialog.Cancelをセットしています。ここまで用意するならば最初から文字入力用のダイアログボックスまで作りこんでほしいところです。(VB.NETにはあるらしい)

コメント