表格封闭但可见

时间:2013-12-17 10:55:41

标签: c# winforms modal-dialog

为什么在引发FormClosed事件后表单仍然可见?如何检测表单实际关闭的时间?

enter image description here

有趣的部分是那个

_form2.VisibleChanged += (s, a) => 
{ 
    if (_form2.Visible == false) 
        MessageBox.Show("TEXT"); 
};

导致相同的结果。

2 个答案:

答案 0 :(得分:3)

您正在以不寻常的方式关闭对话框,正常的方法是设置窗体的DialogResult属性。在这种情况下,Winforms仍会合成FormClosed事件,但在“错误”时间执行,窗口仍然可见。之后它会立即隐形。

如果你需要一个解决方法,那么这是可能的,诀窍是延迟你想在FormClosed事件处理程序中做的事情。这是通过使用Control.BeginInvoke()方法优雅地完成的,如下所示:

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

现在,在窗口消失后,您将看到MessageBox

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

答案 1 :(得分:2)

问题在于您正在显示模式对话框 - 这会阻止UI线程实际从屏幕上删除表单。