メインフォームからサブフォームを閉じる - C#
メインフォームからサブフォームを閉じるコードを紹介します。
概要
メインフォームからサブフォームを閉じるには、フォームのインスタンスオブジェクトを保持している場合には、
Close()
メソッドを呼び出すとフォームを閉じられます。
プログラム例
UI
下図のフォームを作成します。フォームにボタンを2つ配置します。メインフォームになります。
もう一つフォームを作成し、下図のフォームを作成します。サブフォームになります。
コード
以下のコードを記述します。メインフォームの2つのボタンのクリックイベントを実装します。
namespace MultiFormCloseFromMainForm
{
public partial class FormMain : Form
{
private FormSub form;
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
form = new FormSub();
form.Show();
}
private void button2_Click(object sender, EventArgs e)
{
form.Close();
}
}
}
解説
FormSub オブジェクトを保存する form 変数をクラスのメンバ変数として宣言し、メソッド終了後も値を保持する変数とします。
button1(Show SubForm ボタン)をクリックするとサブフォームを表示し、button2(Close SubForm ボタン)をクリックすると表示したサブフォームを閉じます。
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[Show SubForm]をクリックします。サブフォームが表示されます。
メインフォームの[Close SubForm]ボタンをクリックします。開いたサブフォームが閉じられます。
なお、複数回ボタンをクリックすると、複数フォームが表示されます。
この状態で、[Close SubForm]ボタンをクリックすると、最後に開いたフォームが閉じられます。
再度[Close SubForm]ボタンをクリックしてもフォームは閉じられません。
複数のフォームを閉じられるようにする
複数回ボタンがクリックされた場合にフォームを閉じられるようにする方法の一つとして、Stackを宣言して作成したそれぞれのフォームのインスタンスを保持する方法があります。
コード
以下のコードに変更します。
using System.Windows.Forms;
namespace MultiFormCloseFromMainForm
{
public partial class FormMain : Form
{
Stack<FormSub> forms=new Stack<FormSub>();
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
FormSub fs = new FormSub();
forms.Push(fs);
fs.Show();
}
private void button2_Click(object sender, EventArgs e)
{
if (0 < forms.Count) {
forms.Pop().Close();
}
}
}
}
解説
FormSubのスタックを宣言し、オブジェクトを作成します。
Stack<FormSub> forms=new Stack<FormSub>();
button1(Show SubForm ボタン)をクリックするとフォームオブジェクトを作成し、スタックにプッシュし、その後Showメソッドでサブフォームを表示します。
private void button1_Click(object sender, EventArgs e)
{
FormSub fs = new FormSub();
forms.Push(fs);
fs.Show();
}
button2(Close SubForm ボタン)をクリックするとスタックからポップして取得したFormSubオブジェクトのCloseメソッドを呼び出してサブフォームを閉じます。
private void button2_Click(object sender, EventArgs e)
{
if (0 < forms.Count) {
forms.Pop().Close();
}
}
実行結果
プロジェクトを実行し、[Show SubForm]ボタンを複数回クリックし、サブフォームを複数表示します。
[Close SubForm]ボタンをクリックします。最後に開いたフォームが閉じられます。
[Close SubForm]ボタンをクリックするごとにフォームが閉じられます。
複数のサブフォームを閉じる動作に対応できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2012-04-26
改訂日: 2024-09-20