aus*_*ush 6 c# modal-dialog winforms
为什么在引发FormClosed事件后表单仍然可见?如何检测表单何时实际关闭?
有趣的是这一点
_form2.VisibleChanged += (s, a) =>
{
if (_form2.Visible == false)
MessageBox.Show("TEXT");
};
Run Code Online (Sandbox Code Playgroud)
导致相同的结果.
您正在以一种不寻常的方式关闭对话框,正常的方式是通过设置表单的 DialogResult 属性。在这种情况下,Winforms 仍然会合成 FormClosed 事件,但在“错误”的时间进行,窗口仍然可见。之后它将立即消失。
如果您需要解决此问题,那么这是可能的,技巧是延迟您想要在 FormClosed 事件处理程序中执行的任何操作。通过使用 Control.BeginInvoke() 方法可以优雅地完成此操作,如下所示:
_form2.FormClosed += (s, a) => {
this.BeginInvoke(new Action(() => MessageBox.Show("TEXT")));
};
Run Code Online (Sandbox Code Playgroud)
现在,窗口消失后您将看到消息框。
请注意代码中的错误,您多次订阅 FormClosed 事件。