[VC2005] 新しいフォームを開く方法

◆概要
このページは、Microsoft C#で新しいフォームを開く方法について記述しています。


◆モードレス表示
Windowsフォームをモードレス表示するには、表示したいフォームのクラスからオブジェクトを生成して、そのShowメソッドを実行します。

        private void button1_Click(object sender, EventArgs e) {
            Form2 _fm2 = new Form2();
            _fm2.Show();
        }

.NET Framework 2.0からは、ジェネリックの仕組みを使ったリストである「Listジェネリック・クラス」が利用できます。フォーム・オブジェクトをListジェネリック・クラス(「SubFormList」変数)で管理する例を次に示します。

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
    public partial class Form1 : Form {

        private List<Form2> SubFormList = new List<Form2>();

        public Form1() {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e) {
            Form2 _form = new Form2();
            _form.Show(this);
            SubFormList.Add(_form);
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
            foreach (Form2 _form in SubFormList) {
                _form.Close();
                _form.Dispose();
            }
        }
    }
}


▼ページトップへ

◆モーダル表示

Windowsフォームをモーダル表示するには、New演算子を使って、表示したいフォームのクラスからオブジェクトを生成して、そのShowDialogメソッドを実行します。この場合、アプリケーション内のほかのフォームは選択できなくなります。

        private void button1_Click(object sender, EventArgs e) {
            Form2 _fm2 = new Form2();
            _fm2.ShowDialog();
        }

using区を使って、Form2のDisposeを確実にするには次のようにします。

        private void button1_Click(object sender, EventArgs e) {
            using (Form2 _frm2 = new Form2()) {
                _frm2.ShowDialog(this);
            }            
        }



▼ページトップへ

◆ApplicationクラスのRunメソッドを使う方法

以下の例では、Application クラスの Run メソッドが呼び出され、実行の制御が Run メソッドに移り、Form1が表示されます。

 Form1を閉じると、Run メソッドを抜けて制御が Main メソッドに戻ります。そして、メッセージボックスが表示されます

        static void Main() {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
            MessageBox.Show("Form1を閉じました。", "Sample",
                MessageBoxButtons.OK,
                MessageBoxIcon.Information);
        }



▼ページトップへ