MdiClient のイベントによりフォームの追加、削除を検出する - C#
MdiClientのControlAdded,ControlRemovedイベントハンドラを実装することでMDIアプリケーションに子フォームが追加、削除されたタイミングを検出できるようになります。
UI
以下のUIを準備します。
FormMain
IsMdiContainerプロパティをTrueにします。
FormChild
FormControl
ボタンとテキストボックスを配置します。
テキストボックスのMultiLinesプロパティをTrueにします。Modifiersプロパティを"Public"にします。
コード
以下のコードを記述します。
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 MDIClientEvent
{
public partial class FormMain : Form
{
System.Windows.Forms.MdiClient mc;
FormControl fcnt;
public FormMain()
{
InitializeComponent();
}
private void FormMain_Load(object sender, EventArgs e)
{
fcnt = new FormControl();
fcnt.MdiParent = this;
fcnt.Show();
foreach (System.Windows.Forms.Control c in Controls) {
if (c is System.Windows.Forms.MdiClient) {
mc = (System.Windows.Forms.MdiClient)c;
mc.ControlAdded += new ControlEventHandler(MDIClient_ControlAdded);
mc.ControlRemoved += new ControlEventHandler(MDIClient_ControlRemoved);
}
}
}
private void MDIClient_ControlAdded(object sender, ControlEventArgs e)
{
fcnt.textBox1.Text += "MDI子フォーム追加\r\n";
}
private void MDIClient_ControlRemoved(object sender, ControlEventArgs e)
{
fcnt.textBox1.Text += "MDI子フォーム削除\r\n";
}
}
}
解説
private void FormMain_Load(object sender, EventArgs e)
{
fcnt = new FormControl();
fcnt.MdiParent = this;
fcnt.Show();
foreach (System.Windows.Forms.Control c in Controls) {
if (c is System.Windows.Forms.MdiClient) {
mc = (System.Windows.Forms.MdiClient)c;
mc.ControlAdded += new ControlEventHandler(MDIClient_ControlAdded);
mc.ControlRemoved += new ControlEventHandler(MDIClient_ControlRemoved);
}
}
}
FormControlのインスタンスを作成しフォームを表示します。
foreachループを用いてフォームのコントロールを列挙します。"System.Windows.Forms.MdiClient"であるコントロールを見つけます。MdiClientのControlAdded イベントとControlRemoved イベントハンドラを設定します。
private void MDIClient_ControlAdded(object sender, ControlEventArgs e)
{
fcnt.textBox1.Text += "MDI子フォーム追加\r\n";
}
private void MDIClient_ControlRemoved(object sender, ControlEventArgs e)
{
fcnt.textBox1.Text += "MDI子フォーム削除\r\n";
}
ControlAdded イベントとControlRemoved イベントの実装です。テキストボックスにメッセージを表示します。
実行結果
プロジェクトを実行します。下図のフォームが表示されます。
Button1をクリックするとMDI子フォームが追加されます。また、テキストボックスにフォームが追加された旨のメッセージが表示されます。
フォームを閉じるとテキストボックスにフォームが削除された旨のメッセージが表示されます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用