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

Mar*_*ijn 9 c# winforms

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

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

  // Some other code...
}
Run Code Online (Sandbox Code Playgroud)

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

我知道,当我在表格结束return后立即this.Close()关闭时,我想知道为什么表格在你打电话时不会直接关闭this.Close().为什么执行事件处理程序的其余部分?

Dir*_*mar 11

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

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

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

  • @Martijn表示表格已在视觉上关闭.它不再显示在屏幕上,_user_无法与它交互.如果您关闭抽屉,您是否期望它被销毁?或者你只是接受你必须重新打开它才能与抽屉里的东西互动?关闭表格也是如此.如果您希望与表格上的内容进行互动,则需要重新打开它,但就像抽屉没有被破坏一样,表格也是如此 (2认同)

vul*_*ino 5

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

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

  • 不,这不正确.`Form.Close()`将处理表单,即它调用`Dispose`方法. (4认同)
  • +1.谢谢`this.Dispose(); 这个.关闭();`对我来说很好:) (4认同)