Как мне добавить код к кнопке выхода в форме c #?
Вопрос
Я использую Microsoft Visual C # 2008 Express.
В моей основной форме есть кнопка X для закрытия формы в правом верхнем углу.Как мне добавить код к этой кнопке?В моем меню у меня есть пункт "Выход", и в нем есть код, который очищает и закрывает мои базы данных.Как мне добавить тот же код к этой кнопке, если пользователь выберет это в качестве способа выхода?
Спасибо!
-Адина
Решение
Использование события FormClosing должно перехватывать любой способ закрытия формы.
Другие советы
В режиме конструктора вашей формы в окне свойств выберите кнопку События и прокрутите вниз до событий "FormClosed" и "FormClosing".
FormClosed вызывается после закрытия формы.
FormClosing вызывается перед закрытием формы, а также позволяет отменить закрытие, сохраняя форму открытой:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
Если вы хотите спросить пользователя "Вы уверены, что хотите закрыть эту форму?", то используйте FormClosing
, где вы можете установить Cancel = True
и форма оставалась бы открытой.
Если вы хотите закрыть какой-либо ресурс только тогда, когда форма определенно закрыта, то вы используете FormClosed
событие.
Если вы контролируете весь код, то это вроде как не имеет значения.Но чего вы не хотите, так это очистки ресурсов с использованием FormClosing
когда другой обработчик события сохранит форму открытой.
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
}
Используйте Закрытое событие вашей 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();
}