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

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

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

спасибо!

-Adeena

9 ответов


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


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

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

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

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
}

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

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

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


FormClosing / FormClosed позволяет наблюдать за событием для той формы, которая может совпадать с выходом приложения. Однако есть еще одно событие, которое вы можете подключить, называемое приложением.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

}

используйте закрытое событие вашей winform.


этот код захватит пользователя, нажав на " 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);
}

дважды нажмите кнопку выхода в form'Design затем просто вызовите метод Dispose ()


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

 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;
                     }
         }

 You can use form closing events choose or set closing event in  properties window      
 You can add dialog conditions based on what task you want to perform before closing form

private void Form1_FormClosing(object sender,FormClosingEventArgs e)
{
Application.Exit();
//you can also use Application.ExitThread();
}