2010-05-25 2 views

ответ

31

Обращайтесь к делу FormClosed.

Для этого перейдите на вкладку «События» в окне «Свойства» и дважды щелкните событие FormClosed, чтобы добавить к нему обработчик.

Затем вы можете поместить свой код в сгенерированный обработчик MyForm_FormClosed.

Вы также можете это сделать, переопределив метод OnFormClosed; для этого введите override onformcl в окне кода и OnFormClosed от IntelliSense.

Если вы хотите, чтобы предотвратить закрытие формы, обработайте событие FormClosing и установите e.Cancel на номер true.

+0

нет "Закрыто" события, только "FormClosed" - вполне неинтуитивных –

+2

@hello_earth: Было 'Closed' событие в .Net 1; он был заменен на .Net 2.0 из-за различных проблем. Исходное событие 'Closed' все еще существует для совместимости, но скрыто. – SLaks

3

Добавить обработчик событий в событие FormClosed для вашей формы.

public class Form1 
{ 

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

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

Это событие устарело – Ian

+0

@Ian - Исправлено. –

8

У WinForms есть два события, которые вы можете посмотреть.

Первое, событие FormClosing, происходит до того, как форма фактически закрыта. В этом случае вы можете получить доступ к любым элементам управления и переменным в классе формы. Вы также можете отменить форму закрытия, установив e.Cancel = true; (где e - это System.Windows.Forms.FormClosingEventArgs, отправленный как второй аргумент FormClosing).

Второе, событие FormClosed, происходит после закрытия формы. На данный момент вы не можете получить доступ к элементам управления, которые были в форме, хотя вы по-прежнему можете выполнять очистку переменных (например, закрытие управляемых ресурсов).

+2

Обновлено для использования 'FormClosing' и' FormClosed' как 'Closing' и' Closed' устарели. – Powerlord

+1

Плюс 2 для подробного описания того, что вы обновили от и до. – AidanO

+0

Это определенно «все переменные», а также элементы управления в форме?Я попробовал только сейчас и ссылаюсь на 2 поля класса Form, которые у меня есть (унаследованные от формы), и к ним можно получить доступ в порядке - в событии FormClosed – PandaWood

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

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

Или другой альтернативой является переопределить методы OnFormClosed() или OnFormClosing() из System.Windows.Forms.Form.

Следует ли использовать этот метод, зависит от контекста проблемы и более полезен, если форма будет подклассифицирована несколько раз, и все они должны выполнить один и тот же код.

События более полезны для одного или двух случаев, если вы делаете то же самое.

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

** И вызвать 'base.OnFormClosing (e)'. ** – SLaks

+1

Я бы сделал это естественно и считал его частью комментария // Code. Но на самом деле вы правы, вероятно, должны быть там для менее опытных. Спасибо SLaks. – Ian

-3

Синтаксис:

form_name.ActiveForm.Close(); 

Пример:

{ 
     Form1.ActiveForm.close(); 
    }