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