第9章 MessageBoxクラス


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回目のクリックです」と いう表示が出てきます。

そして、またメッセージボックスも出てきますね。ここで、「キャンセル」ボタンを押します。



すると、今度は「「キャンセル」ボタン」と赤字で表示されましたね。




[C# フォーム Index] [C# コンソール Index] [総合Index] [Previous Chapter] [Next Chapter]

Update 24/Oct/2006 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。