为什么在引发FormClosed事件后表单仍然可见?如何检测表单实际关闭的时间?
有趣的部分是那个
_form2.VisibleChanged += (s, a) =>
{
if (_form2.Visible == false)
MessageBox.Show("TEXT");
};
导致相同的结果。
答案 0 :(得分:3)
您正在以不寻常的方式关闭对话框,正常的方法是设置窗体的DialogResult属性。在这种情况下,Winforms仍会合成FormClosed事件,但在“错误”时间执行,窗口仍然可见。之后它会立即隐形。
如果你需要一个解决方法,那么这是可能的,诀窍是延迟你想在FormClosed事件处理程序中做的事情。这是通过使用Control.BeginInvoke()方法优雅地完成的,如下所示:
_form2.FormClosed += (s, a) => {
this.BeginInvoke(new Action(() => MessageBox.Show("TEXT")));
};
现在,在窗口消失后,您将看到MessageBox 。
请注意代码中的错误,您不止一次订阅FormClosed事件。
答案 1 :(得分:2)
问题在于您正在显示模式对话框 - 这会阻止UI线程实际从屏幕上删除表单。