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

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

概要

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

プログラム例

プロジェクト作成

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

プロジェクト作成後[新しい項目の追加]で[Windows フォーム]を追加します。今回、名称を"SubForm1.cs"としました。
モーダルでのフォームの表示とモーダルフォームの戻り値の設定:画像1

[ソリューションエクスプローラに]メインフォームとサブフォームの2つのフォームが追加されました。
モーダルでのフォームの表示とモーダルフォームの戻り値の設定:画像2

UI

メインフォームのUIを作成します。ボタン1つ、ラベル1つを配置します。(下図参照)
モーダルでのフォームの表示とモーダルフォームの戻り値の設定:画像3

サブフォームのUIを作成します。ボタンを2つ配置します。(下図参照)
モーダルでのフォームの表示とモーダルフォームの戻り値の設定:画像4

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

"DialogResult"プロパティに"OK"が設定されました。
モーダルでのフォームの表示とモーダルフォームの戻り値の設定:画像6

同様の手順で"Button2"の"DialogResult"プロパティに"Cancel"を設定します。
モーダルでのフォームの表示とモーダルフォームの戻り値の設定:画像7

コード

メインフォームのボタンの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プロパティを設定すれば、フォームを閉じるコードや値を返すコードを記述する必要はありません。

実行結果

アプリケーションを実行します。下図のウィンドウが表示されますのでボタンをクリックします。
モーダルでのフォームの表示とモーダルフォームの戻り値の設定:画像8

SubForm1が表示されます。モーダルウィンドウのため、メインフォームにフォーカスを移せません。
モーダルでのフォームの表示とモーダルフォームの戻り値の設定:画像9

SubForm1の[OK]ボタンを押すと、フォームが閉じメインフォームのラベルに"OK"が表示されます。
モーダルでのフォームの表示とモーダルフォームの戻り値の設定:画像10

SubForm1の[Cancel]ボタンを押した場合は、メインフォームのラベルに"Cancel"が表示されます。
モーダルでのフォームの表示とモーダルフォームの戻り値の設定:画像11

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

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