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
"表示" メニュー → "タブ オーダー" で行う。