2010-05-25 99 views

回答

31

处理FormClosed事件。

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

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

你也可以通过重写OnFormClosed方法来解决这个问题。要在代码窗口输入override onformcl,在IntelliSense中输入OnFormClosed

如果您希望能够阻止窗体关闭,请改为处理FormClosing事件,并将e.Cancel设置为true

+0

没有 “关闭” 事件,只是 “FormClosed” - 相当直观 – 2012-05-31 12:24:51

+2

@hello_earth:有一个'Closed'事件在.Net 1中;由于各种问题,它在.Net 2.0中被替换。最初的'Closed'事件仍然存在,因为兼容性,但是隐藏。 – SLaks 2012-05-31 12:55:08

3

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

public class Form1 
{ 

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

    protected void MyClosedHandler(object sender, EventArgs e) 
    { 
     // Handle the Event here. 
    } 
} 
+0

该事件已被弃用 – Ian 2010-05-25 15:25:23

+0

@Ian - 修正了它。 – 2010-05-25 15:27:20

8

WinForms有两个事件,你可能想看看。

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

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

+2

已更新此为使用'FormClosing'和'FormClosed'作为'Closing'和'Closed'已弃用。 – Powerlord 2010-05-25 15:24:19

+1

加2,用于告诉你从哪里更新它。 – AidanO 2011-01-24 16:08:34

+0

它绝对是“所有变量”以及表单上的控件吗?我刚刚尝试并引用了Form类的2个字段(从Form继承而来),并且可以很好地访问它们 - 在FormClosed事件中 – PandaWood 2014-09-19 06:16:05

2
public FormName() 
{ 
     InitializeComponent(); 
     this.FormClosed += FormName_FormClosed; 
} 

private void FormName_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e) 
{ 
   //close logic here 
} 
15

或者另一替代方案是重写从System.Windows.Forms.Form中的OnFormClosed()或OnFormClosing()方法。

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

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

public class FormClass : Form 
{ 
    protected override void OnFormClosing(FormClosingEventArgs e) 
    { 
     base.OnFormClosing(e); 
     // Code 
    } 
} 
+7

**并调用'base.OnFormClosing(e)'。** – SLaks 2010-05-25 16:18:59

+1

我会自然而然地认为它是//代码注释的一部分。但事实上你是对的,可能应该在那里为较小的经验。谢谢SLaks。 – Ian 2010-05-26 08:04:10

-3

语法:

form_name.ActiveForm.Close(); 

例子:

{ 
     Form1.ActiveForm.close(); 
    }