Как я могу заставить свою форму окон делать что-то, когда она закрывается.
Обработка события FormClosed
.
Для этого перейдите на вкладку «События» в окне «Свойства» и дважды щелкните событие FormClosed
, чтобы добавить для него обработчик.
Затем вы можете поместить свой код в сгенерированный обработчик MyForm_FormClosed
.
Это также можно сделать, переопределив метод OnFormClosed
; для этого введите override onformcl
в окне кода и OnFormClosed
из IntelliSense.
Если вы хотите предотвратить закрытие формы, обработайте событие FormClosing
и установите для e.Cancel
значение true
.
public FormName()
{
InitializeComponent();
this.FormClosed += FormName_FormClosed;
}
private void FormName_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
{
//close logic here
}
Добавьте обработчик событий к событию FormClosed для вашей формы.
public class Form1
{
public Form1()
{
this.FormClosed += MyClosedHandler;
}
protected void MyClosedHandler(object sender, EventArgs e)
{
// Handle the Event here.
}
}
WinForms имеет два события, на которые вы, возможно, захотите посмотреть.
Первое, событие FormClosing
, происходит до фактического закрытия формы. В этом случае вы по-прежнему можете получить доступ к любым элементам управления и переменным в классе формы. Вы также можете отменить закрытие формы, установив e.Cancel = true;
(где e
- это System.Windows.Forms.FormClosingEventArgs
, отправленный в качестве второго аргумента по FormClosing
).
Второе, событие FormClosed
, происходит после закрытия формы. На этом этапе вы не можете получить доступ к элементам управления, которые были в форме, хотя вы все равно можете выполнять очистку переменных (например, закрытие управляемых ресурсов).
Или другая альтернатива - переопределить методы OnFormClosed() или OnFormClosing() из System.Windows.Forms.Form.
Стоит ли использовать этот метод, зависит от контекста проблемы, и он более полезен, когда форма будет подклассифицирована несколько раз, и все они должны выполнять один и тот же код.
События более полезны для одного или двух экземпляров, если вы делаете одно и то же.
public class FormClass : Form
{
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
// Code
}
}