表格封闭但可见

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)

导致相同的结果.

Han*_*ant 3

您正在以一种不寻常的方式关闭对话框,正常的方式是通过设置表单的 DialogResult 属性。在这种情况下,Winforms 仍然会合成 FormClosed 事件,但在“错误”的时间进行,窗口仍然可见。之后它将立即消失。

如果您需要解决此问题,那么这是可能的,技巧是延迟您想要在 FormClosed 事件处理程序中执行的任何操作。通过使用 Control.BeginInvoke() 方法可以优雅地完成此操作,如下所示:

    _form2.FormClosed += (s, a) => {
        this.BeginInvoke(new Action(() => MessageBox.Show("TEXT")));
    };
Run Code Online (Sandbox Code Playgroud)

现在,窗口消失后您将看到消息框。

请注意代码中的错误,您多次订阅 FormClosed 事件。