WinForms を使用していると仮定すると、共有 FormWindowState マネージャーを実装するか、Multiple Document Interface (MDI) コンテナーを使用することができます。
共有 FormWindowState
フォームの FormWindowState の変更を伝達するクラスに、各フォームを登録できます。
public class FormWindowStateManager {
List<Form> _Forms;
...
public void Register(Form form) {
if(!_Forms.Contains(form)) {
_Forms.Add(form);
form.Resize += new EventHandler(Form_Resize);
}
}
public void Unregister(Form form) {
if(_Forms.Contains(form)) {
_Forms.Remove(form);
form.Resize -= new EventHandler(Form_Resize);
}
}
private void Form_Resize(object sender, EventArgs e) {
Form form = sender as Form;
if(form != null) {
if(form.FormWindowState == FormWindowState.Maximized || form.FormWindowState == FormWindowState.Normal) {
PropagateWindowState(form.FormWindowState);
}
}
}
private void PropagateWindowState(FormWindowState state) {
foreach(Form form in _Forms) {
if(form.FormWindowState != state) {
form.FormWindowState = state;
}
}
}
}
MDI コンテナ
MdiParentForm.cs
IsMdiContainer = true;
MdiChildForm.cs
MdiParent = myParentForm; // instance of MdiParentForm
MdiChildren
フォームのプロパティを使用してフォームの MDI 子を反復処理し、 MDI 子ウィンドウでそのFormWindowState
を変更すると、共有 FormWindowState アプローチと同様に、MDI 親フォームがその変更を各子に適用できます。
これらのアイデアは私の頭の中にあるものですが、おそらく正しい方向に導くでしょう.