モーダルでのフォームの表示とモーダルフォームの戻り値の設定 - C#

モーダルフォームの表示とモーダルフォームの戻り値の設定方法を紹介します。

概要

ダイアログ動作(モーダル形式)でフォームを表示させる場合はFormオブジェクトの ShowDialog() メソッドを用います。

プログラム例

プロジェクト作成

新規で[Windows フォーム アプリケーション]プロジェクトを作成します。

プロジェクト作成後[新しい項目の追加]で[Windows フォーム]を追加します。今回、名称を"SubForm1.cs"としました。


[ソリューションエクスプローラに]メインフォームとサブフォームの2つのフォームが追加されました。

UI

メインフォームのUIを作成します。ボタン1つ、ラベル1つを配置します。(下図参照)


サブフォームのUIを作成します。ボタンを2つ配置します。(下図参照)


サブフォームのButton1を選択し、プロパティウィンドウの[DialogResult]プロパティを編集します。プロパティの値のコンボボックスをクリックすると値の一覧が表示されます。今回は[OK]を選択します。


"DialogResult"プロパティに"OK"が設定されました。


同様の手順で"Button2"の"DialogResult"プロパティに"Cancel"を設定します。

コード

メインフォームのボタンのClickイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MultiModalFormApp
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      SubForm1 subform1 = new SubForm1();
      DialogResult dr = subform1.ShowDialog();
      label1.Text = Enum.GetName(typeof(DialogResult), dr);
    }
  }
}

解説

SubForm1 subform1 = new SubForm1();
にてサブフォームのインスタンスを作成します。

DialogResult dr = subform1.ShowDialog();
ShowDialog()メソッドを呼び出しフォームをモーダルで表示します。モーダルフォームの結果がShowDialogメソッドの戻り値で帰ります。

label1.Text = Enum.GetName(typeof(DialogResult), dr);
モーダルフォームの戻り値DialogResultの値名をラベルに表示します。enumの値の名前の取得についてはこちらの記事を参照してください。
補足
モーダルフォーム側はボタンのDialogResultプロパティを設定すれば、フォームを閉じるコードや値を返すコードを記述する必要はありません。

実行結果

アプリケーションを実行します。下図のウィンドウが表示されますのでボタンをクリックします。


SubForm1が表示されます。モーダルウィンドウのため、メインフォームにフォーカスを移せません。


SubForm1の[OK]ボタンを押すと、フォームが閉じメインフォームのラベルに"OK"が表示されます。


SubForm1の[Cancel]ボタンを押した場合は、メインフォームのラベルに"Cancel"が表示されます。


モーダルフォームを表示してモーダルフォームからの戻り値を取得できました。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2012-04-04
iPentec all rights reserverd.