编辑
看到代码后,我建议在Tick事件处理程序中引入第三个选项,用于决定是否必须关闭表单。例如
Abort
。
timer1.Tick += (_, __) =>
{
form2.DialogResult = DialogResult.Abort;
};
if (form2.ShowDialog() == DialogResult.Abort) Close();
else reloadData();
第一个想法:保持简单,保持干净。您不必跟踪打开的表单,在MDI应用程序中
MdiChildren
将为您提供所有表单的父表单的属性。
然后,要处理结束部分,可以使用中的现有功能。网
-
一个困难的方法是使用
P/Invoke
。加载Windows DLL并使用其函数枚举所有窗体,然后关闭所需的窗体。您还可以模拟单击取消按钮。你必须从
EnumWindows
功能(识别表单)和
EnumChildWindows
为了form的孩子。我喜欢这个选项,因为您可以完全控制表单和控件,但如果不熟悉这个概念,可能会让您头疼。
-
您可以查看FormClosing事件并订阅它。此事件在关闭窗体之前激发,您可以使用它进行清理。
-
使用OOP-继承和重写。您可以创建一个带有自定义关闭函数的基本表单来进行清理(然后通过它继承所有表单),或者重写表单的关闭函数来实现您的目标。