第39章 最も簡単なダイアログボックス


C#では、ダイアログボックスは、基本的にフォームと同じです。



一般的に、ダイアログボックスと言えば、タスクモーダル・ダイアログボックスを指します。これは、ダイアログボックスが表示されている間、その親の操作ができません。

Win32APIプログラミングでは、システムモーダルなダイアログボックスも作成可能でしたがC#では、作成できないことになっています。

では、ダイアログボックスを作るにはどうしたらよいでしょうか。

1.呼び出し側のフォームでFormオブジェクトを作成する
2.ShowDialogメソッドで、このダイアログを見えるようにする
たったこれだけです。しかし、通常ダイアログボックスには、システムメニューボタン、最大化・最小化ボタンがないのが普通です。また、サイズも変更不能であることが一般的です。そこで、ダイアログボックスとして利用するフォームのプロパティは
1.ControlBox, MaximizeBox, MinimizeBoxをfalseに設定する
2.FormBorderStyleをFormBorderStyle.FixedDialogに設定する
また、ダイアログボックスがWindowsのタスクバーに表示させないようにするため
ShowInTaskbarをfalseに設定する
ことが必要です。また、ダイアログボックスは「OK」とか「キャンセル」ボタンを押したときに閉じるのが普通です。これには、Button.DialogResultプロパティを設定します。

これは、親フォームがShowDialogメソッドで表示されている場合、ボタンをクリックすると親フォームが自動的に閉じてくれます。

では、サンプルを見てみましょう。

// dialog01.cs

using System;
using System.Drawing;
using System.Windows.Forms;

class dialog01 : Form
{
    public static void Main()
    {
        Application.Run(new dialog01());
    }

    public dialog01()
    {
        Text = "猫でもわかるC#プログラミング";
        BackColor = SystemColors.Window;

        MainMenu mm = new MainMenu();
        Menu = mm;

        MenuItem miFile = new MenuItem();
        miFile.Text = "ファイル(&F)";
        mm.MenuItems.Add(miFile);

        MenuItem miExit = new MenuItem();
        miExit.Text = "終了(&X)";
        miExit.Click += new EventHandler(miExit_Click);
        miFile.MenuItems.Add(miExit);

        MenuItem miOption = new MenuItem();
        miOption.Text = "オプション(&O)";
        mm.MenuItems.Add(miOption);

        MenuItem miDialog = new MenuItem();
        miDialog.Text = "ダイアログボックスを出す(&D)";
        miDialog.Click += new EventHandler(miDialog_Click);
        miOption.MenuItems.Add(miDialog);
    }

    void miDialog_Click(object sender, EventArgs e)
    {
        MyDialog mydlg = new MyDialog();
        mydlg.ShowDialog();
    }

    void miExit_Click(object sender, EventArgs e)
    {
        Close();
    }
}

class MyDialog : Form
{
    public MyDialog()
    {
        Text = "ダイアログボックス";

        FormBorderStyle = FormBorderStyle.FixedDialog;
        ControlBox = false;
        ShowInTaskbar = false;
        MaximizeBox = false;
        MinimizeBox = false;

        Button btnOK = new Button();
        btnOK.Text = "OK";
        btnOK.Parent = this;
        btnOK.Location = 
            new Point((ClientSize.Width - btnOK.Width) / 2,
            ClientSize.Height - btnOK.Height - 10);
        btnOK.DialogResult = DialogResult.OK;
    }
}
メニューの「ダイアログボックスを出す」を選択すると、miDialog_Clickメソッドが呼び出されます。このメソッドでは単に
MyDialog mydlg = new MyDialog();
mydlg.ShowDialog();
と、しているだけです。これでダイアログボックスが出現します。このダイアログボックスのプロパティは、MyDialog(Formクラスを継承)クラスのコンストラクタで設定しています。

また、ダイアログボックス上の「OK」ボタンのDialogResultプロパティにDialogResult.OKを設定してますが、このボタンが押されると親のダイアログが閉じます。またShowDialogメソッドの戻り値がDialogResult.OKとなります(このプログラムでは利用していない)。呼び出し元では、どのボタンが押されてダイアログが閉じたのかがわかります。

簡単ですね。

実行結果は次のようになります。

メニューの「オプション」「ダイアログボックスを出す」を選択します。



このダイアログか表示されている間、親フォームのメニュー等は一切操作ができなくなります。




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

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