我试图通过Form.Closing事件关闭我的winforms应用程序,并带有自定义消息(是否要退出是/否)。为此我已经为我的c#项目中的每个表单编辑了onFormClosing事件。像这样:
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
if (e.CloseReason == CloseReason.WindowsShutDown) return;
// Confirm user wants to close
switch (MessageBox.Show(this, "Are you sure you want to close?", "Closing", MessageBoxButtons.YesNo))
{
case DialogResult.No:
e.Cancel = true;
break;
default:
break;
}
}
当用户单击是时,我想让整个应用程序退出。但是,我有一个主窗体,它起到登录窗体的作用。当用户登录时,主窗体将被隐藏,并显示另一个窗体。
因此,当用户单击“是”时,整个应用程序不会因为隐藏的表单而结束。如何确保整个应用程序关闭?
我尝试过Application.Exit(),这会触发消息框再次确认关闭,因为它调用了OnFormClosing事件。
答案 0 :(得分:5)
您可以明确处理Application.Exit
作为其自身原因:
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
if (e.CloseReason == CloseReason.WindowsShutDown
|| e.CloseReason == CloseReason.ApplicationExitCall)
return;
这将允许您使用Application.Exit()
在处理程序中正确关闭。或者,您可以直接关闭主(隐藏)表单。
答案 1 :(得分:1)
芦苇解决方案是最好的,如果你想要你也可以试试这个:
System.Diagnostics.Process.GetCurrentProcess().Kill();
答案 2 :(得分:0)
您是否拥有登录表单的句柄?只需致电loginForm.Close()
并将确认对话框仅处理为真正的主表单。由于登录表单是您传递给Application.Run()
的表单,因此关闭它将关闭应用程序。