MessageBoxクラスは、System.Windows.Forms名前空間で定義されています。
おそらく、一番使われるのがShowメソッドでしょう。
Showメソッドは、staticなメソッドなのでいきなり使うことができます。また、多くのオーバーロードバージョンがあります。よく使われるバージョンを紹介します。
public static DialogResult Show ( string text )textには、メッセージボックスに表示したいテキストを指定します。
public static DialogResult Show ( string text, string caption )captionは、タイトルバーに表示するテキストを指定します。
public static DialogResult Show ( string text, string caption, MessageBoxButtons buttons )buttonsは、メッセージボックスにつけるボタンを指定します。
buttonsは、System.Windows.Forms名前空間で定義されている列挙体です。
メンバには、次のようなものがあります。
メンバ | 意味 |
---|---|
AbortRetryIgnore | 「中止」「再試行」「無視」ボタンを表示 |
OK | 「OK」ボタンを表示 |
OKCancel | 「OK」「キャンセル」ボタンを表示 |
RetryCancel | 「OK」「再試行」ボタンを表示 |
YesNo | 「はい」「いいえ」ボタンを表示 |
YesNoCancel | 「はい」「いいえ」「キャンセル」ボタンを表示 |
Showメソッドの戻り値DialogResult型はやはり列挙体で、System.Windows.Forms名前空間で定義されています。
DialogResult列挙体のメンバには、次のようなものがあります。
メンバ | 意味 |
---|---|
Abort | 「中止」ボタンが押されたときの戻り値 |
Cancel | 「キャンセル」ボタンが押されたときの戻り値 |
Ignore | 「無視」ボタンが押されたときの戻り値 |
No | 「いいえ」ボタンが押されたときの戻り値 |
None | ダイアログボックスからNothingが返された(ダイアログは閉じない) |
OK | 「OK」ボタンが押されたときの戻り値 |
Retry | 「再試行」ボタンが押されたときの戻り値 |
Yes | 「はい」ボタンが押されたときの戻り値 |
Showメソッドには、さらにアイコンを表示するバージョンがあります。
public static DialogResult Show ( string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon )iconには、メッセージボックスに表示したいアイコンを指定します。
MessageBoxIconは、System.Windows.Forms名前空間で定義された列挙体です。 メンバには、次のようなものがあります。
メンバ | 意味 |
---|---|
Asterisk | 円+iのアイコン |
Error | 円+X |
Exclamation | 三角+! |
Hand | 円+X |
Information | 円+i |
None | アイコンは表示されません |
Question | 円+? |
Stop | 円+X |
Warning | 三角+! |
Showメソッドのオーバーロードバージョンはこのくらい知っていれば充分でしょう。
では、簡単なサンプルを見てみましょう。
// messagebox01.cs using System; using System.Drawing; using System.Windows.Forms; class messagebox01 { static string str, str2; static int n; public static void Main() { Form f = new Form(); f.Text = "猫でもわかるプログラミング"; f.BackColor = SystemColors.Window; f.Paint += new PaintEventHandler(OnMyPaint); f.MouseDown += new MouseEventHandler(OnMyMouseDown); Application.Run(f); } static void OnMyPaint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Font f = new Font("MS ゴシック", 14); g.DrawString(str, f, Brushes.Black, new PointF(10F, 10F)); g.DrawString(str2, f, Brushes.Red, new PointF(10F, 40F)); } static void OnMyMouseDown(object sender, MouseEventArgs e) { DialogResult dr; n++; str = String.Format("{0}回目のクリックです", n); str2 = ""; Form form = (Form)sender; form.Invalidate(); dr = MessageBox.Show(str, "猫でもわかるプログラミング", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); switch (dr) { case DialogResult.OK: str2 = "「OK」ボタン"; break; case DialogResult.Cancel: str2 = "「キャンセル」ボタン"; break; default: str2 = "エラーかな・・・"; break; } form.Invalidate(); } }Mainメソッドを見てください。ここでは、PaintとMouseDownイベントに対してイベントハンドラをインストールしています。
OnMyPaintメソッドはPaintイベントが発生したとき実行されます。
ここでは、strとstr2をクライアント領域に表示しています。
OnMyMouseDownは、MouseDownイベント(マウスボタンが押された時。ボタンの種類は何でもよい)が発生したときに実行されます。
nを1増加させて「x回目のクリックです」というテキストを作成しています。
String.Formatメソッドについては、コンソール編第9章を参照してください。
次にstr2を""に設定しています。(何も表示しない)
さて、ここでOnMyMouseDownメソッドの引数senderをForm型にキャストしている点に注意してください。senderはイベントが発生したフォームを表します。
そして、
form.Invalidate();で、イベントの発生したフォームのクライアント領域をすべて無効領域にしています。 こうすることにより、今度は、そのフォームからPaintイベントが発生します(str,str2がクライアント領域に表示される)。
次に、メッセージボックスを出してstrを表示します。
メッセージボックスのボタン(OKまたはキャンセル)が押されたら、Showメソッドの戻り値を調べて、str2に文字列を設定します。
再度
form.Invalidate();を呼び出して、str,str2をクライアント領域に表示します。
どうして最初にstr = "";としているのでしょうか。この行をコメントアウトして実行してみるとすぐにわかりますね。
では、実行結果を見てみましょう。
実行すると、何も表示されていないフォームが現れます。
クライアント領域をクリックすると・・
クライアント領域に「1回目のクリックです」と表示され、
メッセージボックスも出てきます。
メッセージボックスの「OK」ボタンを押すと、メッセージボックスは消えます。
クライアント領域には、今押したボタンの種類が赤字で表示されます。
もう一度クライアント領域をクリックすると・・・
「「OK」ボタン」という表示は消えて、「2回目のクリックです」と
いう表示が出てきます。
そして、またメッセージボックスも出てきますね。ここで、「キャンセル」ボタンを押します。
すると、今度は「「キャンセル」ボタン」と赤字で表示されましたね。
Update 24/Oct/2006 By Y.Kumei