MSDNのドキュメントには次のように記載されています。
フォームが別のフォームによって所有されている場合、そのフォームは所有者フォームで閉じられるか非表示になります。たとえば、という名前
Form2
のフォームが所有するという名前のフォームについて考えてみForm1
ます。Form1
閉じているか最小化されている場合は、Form2
閉じているか非表示になっています。
どうやら、隠蔽は再帰的に機能していませんか?互いに親である(GrandChildForm.Owner = Child; ChildForm.Owner = ParentForm;
など)4つのフォームのスタックがある場合、それらのいずれかを最小化すると、直接の子も最小化されます。
これらのフォームの1つを閉じるときの同様の効果は、直接の子のFormClosing / Closedイベントのみが発生し、他のアクセス者に対しては発生しません。繰り返しますが、ドキュメントには、これが再帰的に機能しないとは記載されていません。
フォームに子フォームまたは所有フォームがある
FormClosing
場合は、それぞれに対してイベントも発生します。いずれかのフォームがイベントをキャンセルした場合、どのフォームも閉じられません。
私が達成しようとしていること:
- フォームを最小化/復元すると、そのすべての祖先も最小化/復元する必要があります。
- フォームを閉じると、フォームの階層を「最年少」の子までたどり着く必要があります。いずれかの子が閉じないことを決定した場合(
FormClosingEventArgs.Cancel = true;
)、取引は成立しません。
これは、追加のイベント処理(所有者のFormClosing
//イベントをサブスクライブする)を使用して実装する必要がありますか、それともここで何かが不足していますか?FormClosed
SizeChanged