我有一个C#应用程序,它有多个表单。在每个表单上,我都有“取消”按钮和右上角(x)按钮。对于每个表单,我创建了一个cancelButton_Click(),如下所示:
private void cancelButton_Click(object sender, EventArgs e)
{
Application.Exit();
}
这个调用formClosing函数,如下所示:
private void FormLoginPage_Closing(object sender, FormClosingEventArgs e)
{
string exitMessageText = "Are you sure you want to exit the application?";
string exitCaption = "Cancel";
MessageBoxButtons button = MessageBoxButtons.YesNo;
DialogResult res = MessageBox.Show(exitMessageText, exitCaption, button, MessageBoxIcon.Exclamation);
if (res == DialogResult.Yes)
{
e.Cancel = false;
}
else if (res == DialogResult.No)
{
e.Cancel = true;
}
}
类似地,我为所有表单创建了自定义的formClosing函数,因为我想以不同的方式处理所有表单的Closing事件。
然而,当我点击Form2的取消按钮时,控件进入Form1 Closing事件功能。 有没有更好的方法来实现这个?请建议。
答案 0 :(得分:1)
创建一个类似
的新类public static class ApplicationCloseHelper
{
public static void CloseApplication()
{
if (UserIsSure())
{
Application.Exit();
}
}
private static bool UserIsSure()
{
string exitMessageText = "Are you sure you want to exit the application?";
string exitCaption = "Cancel";
MessageBoxButtons button = MessageBoxButtons.YesNo;
DialogResult res = MessageBox.Show(exitMessageText, exitCaption, button, MessageBoxIcon.Exclamation);
return res == DialogResult.Yes;
}
}
然后删除Form_Closing
事件处理程序并调用
ApplicationCloseHelper.CloseApplication();
直接来自Cancel_Click();
答案 1 :(得分:0)
是的,有一种更好的方法可以做你想要达到的目的,只需按照以下步骤操作:
private void cancelButton_Click(object sender, EventArgs e)
{
Close();
}
private void FormLoginPage_Closing(object sender, FormClosingEventArgs e)
{
string exitMessageText = "Are you sure you want to exit the application?";
string exitCaption = "Cancel";
MessageBoxButtons button = MessageBoxButtons.YesNo;
DialogResult res = MessageBox.Show(exitMessageText, exitCaption, button, MessageBoxIcon.Exclamation);
if (res == DialogResult.Yes)
{
e.Cancel = false;
Application.Exit();
}
else if (res == DialogResult.No)
{
e.Cancel = true;
}
}
这样您首先关闭当前表单,这对用户来说是直观的,并且只有在您关闭应用程序之后才会触发其他表单的结束事件。