我有一个主窗体,在这个窗体的类中,我声明了另一个窗体。此表单与主表单一起存在,直到主表单被卸载。主窗体上有一个按钮,点击这个按钮会显示成员窗体(我上面提到过)。当用户关闭该表单时,我想防止成员表单关闭,并为该表单添加了以下 FormClosing 事件处理程序:
private void MemberForm_FormClosing(object sender, FormClosingEventArgs e) {
if(e.CloseReason == CloseReason.UserClosing){
e.Cancel = true;
Hide();
}
}
这适用于该表格。但是,如果用户关闭主窗体,该窗体不会关闭,它隐藏在某处,使我的应用程序似乎无声运行。我也希望关闭此表格。通过为我的主表单添加一些 FormClosed 事件处理程序来手动关闭成员表单,这非常简单。手动关闭它是可以的,但为什么我必须这样做?似乎当用户关闭主窗体时,成员窗体的FormClosing事件是通过传入的参数FormClosingEventArgs触发的,并且CloseReason与主窗体的CloseReason相同(即UserClosing)。我不明白这一点,我认为只有当用户单击 X 按钮时,表单的 CloseReason 才是 UserClosing,我认为我的成员表单的 CloseReason 类似于“MainFormClosing”。
有没有办法默认自动关闭成员表单?
更新
这是显示成员表单的方法(显示为对话框):
private void ShowMemberForm_Click(object sender, EventArgs e){
memberForm.ShowDialog();
}
但我不认为这很重要,因为当我加载我的主窗体时,即使我不需要点击 ShowMemberForm 按钮,并尝试先关闭我的主窗体,它仍然不会关闭成员窗体。谢谢!
更新
这里有一些奇怪的东西,我尝试注释掉 line e.Cancel = true
,甚至所有 FormClosing 事件处理程序,问题仍然存在。这太奇怪了,之前它工作正常,我刚刚添加了成员表单,这个表单涉及一些线程处理,但是只有当点击成员表单上的按钮时,线程才会启动。我没有点击那个按钮。