.net

【.net】開いているForm一覧を取得する方法

Windowsのクライアントアプリを作成する上で、Formを複数起動する場合ってありますよね。

親フォーム(Form1)が、子Form(Form2、Form3)を管理している場合、Form1は子を管理できますが、Form2はForm3の存在は知る術がないですよね。
今回はForm1/Form2/Form3どのフォームからでも、起動しているForm一覧を取得する方法をメモします。

System.Windows.Forms.Applicationクラスには、OpenFormsというプロパティがあり、表示されているすべてのフォームを取得できます。

では実際に試してみます。


サンプルソース

Form1からForm2、Form3を表示して、OpenFormsで取得したフォームタイトルをリストボックスに表示します。
画面はこんなイメージ↓

実行前画面イメージ

Form1.cs


using System;
using System.Windows.Forms;

namespace ExampleProject
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// フォームロード時にForm2とForm3を開く
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Show();

            Form3 f3 = new Form3();
            f3.Show();
        }

        /// <summary>
        /// 取得してみる
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < Application.OpenForms.Count; i++)
            {
                Form f = Application.OpenForms[i];
                listBox1.Items.Add(f.Text);
            }
        }
    }
}

ボタンをクリックして、取得するとこうなります↓

実行後画面イメージ

上記サンプルソースのように、OpenFormsはFormのインスタンスを取得できるので、
指定した画面を閉じたり、Publicメソッドを実行したり、様々なことができます。
なお、アプリを多重起動している場合でも、取得されるフォーム一覧は単一のアプリのインスタンスのみとなります。

以上、開いているForm一覧を取得する豆知識でした。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です