Как добавить код на кнопку выхода в форме С#?

Я использую Microsoft Visual С# 2008 Express.

В моей основной форме есть кнопка X, чтобы закрыть форму в правом верхнем углу. Как добавить код к этой кнопке? В моем меню у меня есть пункт «Выход», и в нем есть код, который очищает и закрывает мои базы данных. Как добавить тот же код к этой кнопке, если пользователь выбирает ее как способ выхода?

Спасибо!

-Адина


person adeena    schedule 24.05.2009    source источник


Ответы (8)


Использование события FormClosing должно перехватить любой способ закрытия формы.

person Peter C    schedule 24.05.2009

В представлении «Дизайн» формы в окне «Свойства» нажмите кнопку «События» и прокрутите вниз до событий «FormClosed» и «FormClosing».

FormClosed вызывается после закрытия формы.

FormClosing вызывается перед закрытием формы, а также позволяет отменить закрытие, оставив форму открытой:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
}
person Matt Brindley    schedule 24.05.2009

Если вы хотите спросить пользователя: "Вы уверены, что хотите закрыть эту форму?", используйте FormClosing, где вы можете установить Cancel = True, и форма останется открытой.

Если вы хотите закрыть какой-то ресурс только тогда, когда форма точно закрыта, то вы используете событие FormClosed.

Если вы контролируете весь код, то это не имеет значения. Но чего вы не хотите, так это очистки ресурсов с помощью FormClosing, когда другой обработчик события будет держать форму открытой.

person van    schedule 24.05.2009

FormClosing/FormClosed позволяет вам наблюдать за событием для этой формы, которое может совпадать с выходом приложения. Однако есть еще одно событие, которое вы можете подключить, оно называется Application.ApplicationExit.

В вашем основном методе:

Application.ApplicationExit += Application_ApplicationExit;

...

private static void Application_ApplicationExit(object sender, EventArgs e) {

  // do stuff when the application is truly exiting, regardless of the reason

}
person Josh    schedule 24.05.2009

Используйте Closed-Event вашей winform.

person Stephan Keller    schedule 24.05.2009
comment
это FormClosed или FormClosing? или не имеет значения, если все, что я делаю, это закрытие баз данных...? - person adeena; 24.05.2009
comment
Извините, опечатка: я имел в виду Closed-Event. Но я только что прочитал, что он заменен на FormClosed-Event из .NET 2.0 и выше. - person Stephan Keller; 24.05.2009

Этот код фиксирует пользователя, нажимающего «X» или использующего Alt-F4 в форме, чтобы вы могли что-то сделать. Мне пришлось использовать это, потому что мне нужно было действие для вызова моего события закрытия, и оно не вызывало бы его при использовании события FormClosing из-за гоночных событий.

/// <summary>
/// This code captures the 'Alt-F4' and the click to the 'X' on the ControlBox
/// and forces it to call MyClose() instead of Application.Exit() as it would have.
/// This fixes issues where the threads will stay alive after the application exits.
/// </summary>
public const int SC_CLOSE = 0xF060;
public const int WM_SYSCOMMAND = 0x0112;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
    if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)
        MyClose();

    base.WndProc(ref m);
}
person uzbones    schedule 24.05.2009

дважды щелкните кнопку выхода в дизайне формы, затем просто вызовите метод Dispose()

person Santosh Thakur    schedule 02.03.2013

Метод действия формы //

 protected override void OnFormClosing(FormClosingEventArgs e)

          {
          base.OnFormClosing(e);

          if (e.CloseReason == CloseReason.WindowsShutDown) return;

               switch (MessageBox.Show(this, "Are you sure you want to exit?", "Exit", MessageBoxButtons.YesNo))
                     {
                       case DialogResult.No:
                           e.Cancel = true;
                           break;
                     default:
                          break;
                     }
         }
person Sumon Banerjee    schedule 04.03.2013