C#为什么form.Close()没有关闭表单?

我有一个按钮单击事件处理程序与以下伪代码:

private void btnSave_Click(object sender, EventArgs e) { if(txt.Text.length == 0) this.Close(); else // Do something else // Some other code... } 

这只是一些简单的代码,但重点是,当文本长度等于零时,我想关闭表单。 但是代码不是关闭表单而是执行部分//其他一些代码。 单击事件处理程序完全执行后,表单将关闭。

我知道,当我在此之后this.Close() returnthis.Close()表单将关闭,但是我想知道为什么在调用this.Close()时表单不会直接关闭。 为什么执行事件处理程序的其余部分?

执行事件处理程序的其余部分是因为您没有离开该方法。 它是如此简单。

调用this.Close()不会立即“删除”表单(和当前事件处理程序)。 如果没有对表单的更多引用,表单将在稍后由垃圾收集器收集。

this.Close()不是常规方法调用,除非方法抛出exception,否则将保留在当前方法的上下文中。

关闭只隐藏表格; 表单仍然存在,如果再次显示,则不会再收到另一个Load事件。

要从内存中实际删除它,请使用Dispose()。

回答很简单,因为您正在执行当前方法,因此this.Close()将被排队,直到您显式返回或当前的excuting方法抛出exception。

另一个可能的解决方案是,如果你打开一个新的Form并想要关闭当前的一个:如果你使用newForm.ShowDialog()而不是newForm.Show()它不会使用currentForm.Close()关闭currentForm,直到newForm也关闭了。

除非Form是一个模态forms(用.ShowDialog()打开),否则Form.Close()也会处理该表单。 因此,尽管其他人可能已经说过,但在此之后,你无法在任何情况下重新打开它。 这种行为有Form.Visible(隐藏/显示表单)。

这里的要点是.Close()不会从它被调用的部分返回,原因有几个。 例如,您可以从另一个表单或类或其他任何东西调用SomeForm.Close()。

Close()只是一种与其他方法一样的方法。 如果这是您想要的,则必须从调用Close()的方法显式返回。

调用MessageBox.Show(frmMain,“消息”,“标题”)将表单“TextDialog”添加到应用程序的Application.OpenForms()表单集合中,与frmMain主表单本身一起。 关闭Messagebox后它仍然存在。

当发生这种情况并且您调用OK按钮委托关闭主窗体时,调用frmMain.Close()将不起作用,主窗体将不会消失,并且程序将不会像退出OK委托后通常那样终止。 只有Application.Exit()将关闭所有垃圾邮箱“TextDialog”。