当前位置: 首页 > 编程语言 > C#

为什么C#form.Close()不关闭窗体?分享

时间:2023-04-11 11:11:48 C#

C#为什么form.Close()不关闭窗体?我有一个带有以下伪代码的按钮单击事件处理程序:privatevoidbtnSave_Click(objectsender,EventArgse){if(txt.Text.length==0)this.Close();else//做点别的事情//一些其他代码...}这只是一些简单的代码,但重点是,我想在文本长度为零时关闭表单。但是代码没有关闭表单,而是执行了//一些其他代码。单击事件处理程序完全执行后,表单将关闭。我知道当我在this.Close()之后返回this.Close()时,表单将关闭,但我想知道为什么在调用this.Close()时表单不直接关闭。为什么要执行事件处理程序的其余部分?事件处理程序的其余部分被执行,因为您没有离开该方法。很简单。调用this.Close()不会立即“删除”表单(和当前事件处理程序)。如果不再有对该表单的引用,该表单稍后将被垃圾回收。this.Close()不是常规方法调用,除非该方法抛出异常,否则将保留在当前方法的上下文中。关闭只是隐藏表格;表单仍然存在,如果再次显示,将不会收到另一个Load事件。要真正将其从内存中删除,请使用Dispose()。答案很简单,因为你正在执行当前方法,所以this.Close()将排队直到你显式返回或当前执行方法抛出异常。另一种可能的解决方案是,如果您打开一个新窗体并想关闭当前窗体:如果您使用newForm.ShowDialog()而不是newForm.Show()它不会用currentForm.Close()关闭currentForm,直到newForm是也关闭了。Form.Close()也处理表单,除非表单是模态表单(使用.ShowDialog()打开)。因此,不管其他人怎么说,在此之后,您在任何情况下都无法将其重新打开。此行为具有Form.Visible(隐藏/显示表单)。这里的要点是.Close()不会从调用它的部分返回,原因有几个。例如,您可以从另一个窗体或类或其他任何地方调用SomeForm.Close()。Close()只是一种与其他任何方法一样的方法。如果这是您想要的,您必须从调用Close()的方法中显式返回。调用MessageBox.Show(frmMain,"message","title")会将表单“TextDialog”与frmMain主表单本身一起添加到应用程序的Application.OpenForms()表单集合中。它在关闭Messagebox后仍然存在。当发生这种情况并且您调用OK按钮委托关闭主窗体时,调用frmMain.Close()将不起作用,主窗体不会消失,并且程序不会像通常在退出OK委托后那样终止。只有Application.Exit()会关闭所有垃圾箱“TextDialog”。以上是C#学习教程:C#中form.Close()为什么不关闭窗体?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: