目次

モーダルフォームとの間でデータや値の受け渡しをする - C#

C#でモーダルフォームとの間でデータや値の受け渡しをするプログラムを紹介します。

概要

こちらの記事ではサブフォームとのデータの受け渡しについて紹介しました。 モーダルフォームの場合はモードレスのフォームと違い、モーダルフォームが閉じられるとメインフォームのフォーム表示処理の続きが実行されるため、 メインフォーム側からサブフォームのメンバ変数を参照することで、よりシンプルに値の受け渡しができます。

プログラム例

UI

下図のUIを作成します。

FormMain

下図のフォームを作成します。フォームにButtonを1つ、Labelを1つ配置します。

FormSub

下図のフォームを作成します。フォームにTextBoxを1つ、Buttonを2つ配置します。
また、[OK]ボタンのDialogResultプロパティに"OK"を設定します。[Cancel]ボタンのDialogResultプロパティには[Cancel]を設定します。

コード

下記のコードを記述します。
FormMain.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

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

    private void button1_Click(object sender, EventArgs e)
    {
      FormSub fs = new FormSub();
      DialogResult dr = fs.ShowDialog();
      if (dr == DialogResult.OK) {
        label1.Text = fs.value;
      }
    }
  }
}
FormSub.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MultiModalFormDataTransfer
{
  public partial class FormSub : Form
  {
    public string value { get; set; }

    public FormSub()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      value = textBox1.Text;
    }
  }
}

解説

サブフォームのインスタンスを作成し、フォームを表示します。フォームはモーダルフォームとして表示するため、ShowDialog()メソッドを呼び出してフォームを表示します。モーダル表示されているサブフォームが閉じられるまでこの行で待機し、サブフォームが閉じられると次行以降を実行します。
  FormSub fs = new FormSub();
  DialogResult dr = fs.ShowDialog();

モーダルフォームの戻り値を確認し、戻り値が"OK"であれば、モーダルフォームのメンバ変数valueの値をlabel1に表示することで、モーダルフォームからの値を取得できます。
  if (dr == DialogResult.OK) {
    label1.Text = fs.value;
  }

モーダルフォーム側では、[OK]のボタンがクリックされたタイミングでテキストボックスに入力された文字列をvalueメンバ変数に代入します。
  private void button1_Click(object sender, EventArgs e)
  {
    value = textBox1.Text;
  }

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。[button1]をクリックします。


モーダル表示でサブフォームが表示されます。


サブフォームのテキストボックスに値を入力します。今回は「ぺんぎん」の文字列を入力します。入力が完了したら[OK]ボタンをクリックします。


サブフォームが閉じられメインフォームに制御が戻ります。メインフォームのLabel部分にサブフォームのテキストボックスに入力した「ぺんぎん」の文字列が表示されます。


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