.NET C#でInputDialogを作成する方法のメモ
"プロジェクト" メニュー → "Windowsフォームの追加"
"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++ と大きく違うところ)
ボタンのプロパティ項目 "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();
}
}
}
余談として、フォームコントロールのタブオーダーの設定は
"表示" メニュー → "タブ オーダー" で行う。