2012年7月6日金曜日

C# フォームをモーダルで開く

C#でフォームをモーダルで開く方法。


[コード]
using System;
using System.Drawing;
using System.Windows.Forms;

class Sample
{
    [STAThread]
    public static void Main()
    {
        Application.Run(new MainForm());
    }
}

class MainForm : Form
{
    private Button bt = new Button();   //ボタン
    private Label lb = new Label();     //ラベル

    public MainForm()
    {
        bt.Text = "モーダルで開く";
        bt.AutoSize = true;
        bt.Location = new Point(20, 20);

        lb.Text = "";
        lb.AutoSize = true;
        lb.Top = bt.Bottom;

        this.Controls.Add(bt);
        this.Controls.Add(lb);

        bt.Click += new EventHandler(bt_Click);
    }
    public void bt_Click(Object sender, EventArgs e)
    {
        DialogResult dRet;
        
        SubForm sForm = new SubForm();
        dRet = sForm.ShowDialog();

        switch (dRet)
        {
            case DialogResult.Yes:
                lb.Text = "[はい]をクリックしました";
                break;
            case DialogResult.No:
                lb.Text = "[いいえ]をクリックしました";
                break;
            default:
                lb.Text = "";
                break;
        }
    }
}
//モーダルで開くフォーム
class SubForm : Form
{
    Button btnYES   = new Button();
    Button btnNO    = new Button();

    public SubForm()
    {
        btnYES.Text = "はい";
        btnYES.AutoSize = true;
        btnYES.DialogResult = DialogResult.Yes;
        btnYES.Location = new Point(20, 20);

        btnNO.Text = "いいえ";
        btnNO.AutoSize = true;
        btnNO.DialogResult = DialogResult.No;
        btnNO.Location = new Point(20, 50);

        this.Controls.Add(btnYES);
        this.Controls.Add(btnNO);
    }
}


[説明]
フォームをモーダルで開くには、ShowDialogクラスの「ShowDialogメソッド」を利用します。
フォームをモーダルで開くと、子のフォームを閉じない限り、親フォームを操作することは出来ない。