20 October 2008

(.NET C#) InputDialog の作成

.NET C#でInputDialogを作成する方法のメモ

20081020-dlg1.png
"プロジェクト" メニュー → "Windowsフォームの追加"

20081020-dlg2.png
"Windowsフォーム"を選択し、ソースコードのファイル名 (ファイルのボディ名はフォームのクラス名になる)を入力する

フォームに、今回はテキストボックス1個と、OK、キャンセルのボタンを付けた後、処理を記述する。

ボタンが押された時の処理を記述する

namespace test_dlg { public class InputDlg : System.Windows.Forms.Form { // ~ このあたり大幅に省略 ~ private void button_ok_Click(object sender, System.EventArgs e) { this.Close(); } private void button_cancel_Click(object sender, System.EventArgs e) { this.Close(); } } }

また、ボタンを押された時に呼び出し側に返される値を決める (ここが、Visual C++ と大きく違うところ)

20081020-dlg3.png
ボタンのプロパティ項目 "DialogResult" を、返したい値に変更する


テキストボックスに入力されている値を、呼び出し側のフォームから読み取れるようにする。

namespace test_dlg { public class InputDlg : System.Windows.Forms.Form { // ~ このあたり大幅に省略 ~ public string strResult; // テキストボックスの値を返すために使う変数 private void button_ok_Click(object sender, System.EventArgs e) { strResult = textBox_main.Text; // テキストボックスの値を変数に格納 this.Close(); } } }

さらに、テキストボックスに初期値を設定できるようにするため、コンストラクタに引数を与える

namespace test_dlg { public class InputDlg : System.Windows.Forms.Form { public InputDlg(string strInit) { InitializeComponent(); textBox_main.Text = strInit; textBox_main.Select(textBox_main.TextLength, 0); // カーソルを末尾に } } }

これで、InputDialog側の一通りのコーディングは終了。

InputDialogを呼び出す側は、次のように記述すればよい

namespace test_dlg { public class Form1 : System.Windows.Forms.Form { private void button1_Click(object sender, System.EventArgs e) { InputDlg dlg = new InputDlg(textBox_main.Text); if(dlg.ShowDialog() == DialogResult.OK) textBox_main.Text = dlg.strResult; dlg.Dispose(); } } }

余談として、フォームコントロールのタブオーダーの設定は

20081020-dlg4.png
"表示" メニュー → "タブ オーダー" で行う。