关闭winform应用程序并隐藏主窗体

时间:2013-12-23 18:53:10

标签: c# winforms visual-studio

我试图通过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事件。

3 个答案:

答案 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()的表单,因此关闭它将关闭应用程序。