当表单由另一个表单拥有时,它将被关闭或隐藏 业主表格。例如,考虑一个名为
Form2
的表单 名为Form1
的表单。如果Form1
已关闭或最小化,Form2
也是如此 关闭或隐藏。
显然隐藏不是递归工作的?当我有一堆4个形式的彼此为父对象(GrandChildForm.Owner = Child; ChildForm.Owner = ParentForm;
等)时,最小化它们中的任何一个只会最小化它的直接孩子。
关闭其中一个表单时,类似的效果只会引发直接子项的FormClosing / Closed事件,但不会引发其他表达式。 Again the docs并未声明这不起作用:
如果表单包含任何子表单或拥有表单,则还会发生
FormClosing
事件 为每个人筹集资金。如果任何一个表单取消该事件,则不会 这些表格已经关闭。
我想要实现的目标:
FormClosingEventArgs.Cancel = true;
),那么交易就会结束。是否应该使用额外的事件处理(订阅所有者的FormClosing
/ FormClosed
/ SizeChanged
事件)来实现,或者我在这里遗漏了什么?
答案 0 :(得分:3)
您可以从此类继承您的表单:
public class AdvancedForm : Form
{
protected override void OnFormClosing(FormClosingEventArgs e)
{
foreach (Form f in this.OwnedForms)
{
f.Close();
}
base.OnFormClosing(e);
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
foreach (AdvancedForm f in this.OwnedForms)
{
switch (this.WindowState)
{
case FormWindowState.Minimized:
case FormWindowState.Normal:
f.WindowState = this.WindowState;
break;
case FormWindowState.Maximized:
// just restore owned forms to their original sizes when parent form is maximized
f.WindowState = FormWindowState.Normal;
break;
}
// OnSizeChanged must be called, as changing WindowState property
// does not raise SizeChanged event
f.OnSizeChanged(EventArgs.Empty);
}
}
}
或者只是在“Closing”和“SizeChanged”事件处理程序中使用此类中的代码。