C#では、メッセージボックスはクラスとして定義されています。
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