C# 独自のメッセージボックスを作る
今回はC#で独自のメッセージボックスを作ります。今回の独自のメッセージボックスはフォームを作って表現します。会社でタブレットやタッチパネルモニタ用のプログラムを作っていますが、通常のメッセージボックスだと小さくてボタンが押しづらいとか、文字が細かくて見づらいとか文句がでるので、わりと使うことが多いです。別のフォームを作り、それを呼び出して、そのフォームに配置したテキストボックスにテキストを送ります。もう一つは、別のフォームにボタンを配置し、それぞれのテキストに「YES」「NO」を設定し、それを選ぶと呼び出し元に結果を返すというものです。まずはフォームを三つ用意します。一つはメインのフォームで、ここから独自メッセージボックスを呼び出します。これをForm1とします。下のようにフォームにボタン二つとテキストボックス二つ配置します。次にメッセージを表示するフォームを作ります。これをForm2とします。ここにはテキストボックスとフォームを閉じるためのボタンを配置します。今回はテキストボックスはMultlineをTrue、ModifireをPublicにします。Modifiresを必ずPublicにしてください。最後に「Yes」「No」選択用のフォームを作ります。これはForm3とします。ボタンを二つ配置し、わかりやすくボタンのテキストを「Yes」「No」にします。今回はフォームを3つ作って、別のフォームのコントールを操作する処理がありますが、これに関する詳しい説明はDOBONさんをご覧ください。今回この辺りの処理を簡略化しています。まずForm1のコードを書きます。 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //任意のメッセージを自作メッセージボックスに送る //メッセージ表示用のフォームを開く Form2 form2 = new Form2(); //メッセージ用フォームにテキストを設定する(Form1のtextBox1.Text) form2.textBox1.Text = this.textBox1.Text; form2.ShowDialog(); } private void button2_Click(object sender, EventArgs e) { Form3 form3 = new Form3(); DialogResult result = form3.ShowDialog(); textBox2.Text = result.ToString(); if (result == DialogResult.Cancel) { textBox2.Text = "選択されなかった"; } } }次はForm2のコードですが、ここは閉じるボタンを押したらフォームを閉じるだけです。 public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //閉じるボタンを押したらフォームを閉じる this.Close(); } }最後にForm3です。 public partial class Form3 : Form { public Form3() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //Yesボタンを押したとき this.DialogResult = DialogResult.Yes; } private void button2_Click(object sender, EventArgs e) { //Noボタンを押した時 this.DialogResult = DialogResult.No; } }文字を表示させる部分は簡単だと思います。Form1からメッセージ用のForm2を開き、Form2のテキストボックスにForm1のテキストボックスの内容を表示させます。注意するべき点は、Form2のテキストボックスのModifiresをPublicにしておくことです。 //メッセージ表示用のフォームを開く Form2 form2 = new Form2(); //メッセージ用フォームにテキストを設定する(Form1のtextBox1.Text) form2.textBox1.Text = this.textBox1.Text; form2.ShowDialog();YesNoボックスを表示させ結果を得る部分は Form3 form3 = new Form3(); DialogResult result = form3.ShowDialog(); textBox2.Text = result.ToString(); if (result == DialogResult.Cancel) { textBox2.Text = "選択されなかった"; }やり方はいくつかあると思いますが、DialogResult result = form3.ShowDialog();この部分がキモです。Form3側で選択した結果がresultに返ります。結果をForm1のtextBoxのテキストに表示します。Form3の右上閉じるボタンで閉じた場合はCancelが返るようです。Form3側はYesとNoのれぞれのボタンのクリック処理に次の処理を書きますが、ボタンを押すとフォームが閉じます。閉じる処理を書いてないのになぜ閉じるのか!?そういうものらしい。 private void button1_Click(object sender, EventArgs e) { //Yesボタンを押したとき this.DialogResult = DialogResult.Yes; } private void button2_Click(object sender, EventArgs e) { //Noボタンを押した時 this.DialogResult = DialogResult.No; }だいたいこんな感じ。