23

如何让我的 Windows 窗体在关闭时执行某些操作。

4

6 回答 6

35

处理FormClosed事件。

为此,请转到“属性”窗口中的“事件”选项卡并双击该FormClosed事件为其添加处理程序。

然后,您可以将代码放入生成的MyForm_FormClosed处理程序中。

您也可以通过覆盖该OnFormClosed方法来做到这一点;为此,请override onformcl在代码窗口和OnFormClosedIntelliSense 中键入。

如果您希望能够阻止表单关闭,请FormClosing改为处理该事件,并将其设置e.Canceltrue.

于 2010-05-25T15:12:11.173 回答
16

或者另一种选择是覆盖 System.Windows.Forms.Form 中的 OnFormClosed() 或 OnFormClosing() 方法。

是否应该使用此方法取决于问题的上下文,并且当表单将被多次子类化并且它们都需要执行相同的代码时更有用。

如果您正在做同样的事情,事件对于一两个实例更有用。

public class FormClass : Form
{
   protected override void OnFormClosing(FormClosingEventArgs e)
   {
        base.OnFormClosing(e);
        // Code
   } 
}
于 2010-05-25T15:22:20.913 回答
9

WinForms 有两个您可能想要查看的事件。

第一个FormClosing事件发生在表单实际关闭之前。在这种情况下,您仍然可以访问表单类中的任何控件和变量。您还可以通过设置取消表单关闭e.Cancel = true;(其中eaSystem.Windows.Forms.FormClosingEventArgs作为第二个参数发送到FormClosing)。

第二个,FormClosed事件,发生在表单关闭之后。此时,您无法访问表单具有的任何控件,尽管您仍然可以对变量进行清理(例如关闭托管资源)。

于 2010-05-25T15:17:47.703 回答
4

将事件处理程序添加到表单的FormClosed事件。

public class Form1
{

    public Form1()
    {    
        this.FormClosed += MyClosedHandler;
    }

    protected void MyClosedHandler(object sender, EventArgs e)
    {
        // Handle the Event here.
    }
}
于 2010-05-25T15:12:33.450 回答
2
 public FormName()
 {
      InitializeComponent();
      this.FormClosed += FormName_FormClosed;
 }

private void FormName_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
{
   //close logic here
}
于 2010-05-25T15:18:50.260 回答
-3

句法 :

   form_name.ActiveForm.Close();

例子:

   {
         Form1.ActiveForm.close();
   }
于 2013-10-16T06:28:18.870 回答