c# - 关闭主窗体隐藏的 winforms 应用程序

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

当用户单击是时,我想让整个应用程序退出。但是,我有一个用作登录表单的主表单。当用户登录时,主窗体被隐藏并显示一个不同的窗体。

所以当用户点击 Yes 时,整个应用程序并没有结束,因为那个隐藏的表单。我怎样才能确保整个应用程序被关闭?

我已经尝试过 Application.Exit(),这会触发再次确认关闭的消息框,因为它会调用 OnFormClosing 事件。

最佳答案

您可以显式处理 Application.Exit 作为它自己的原因:

protected override void OnFormClosing(FormClosingEventArgs e)
{
    base.OnFormClosing(e);

    if (e.CloseReason == CloseReason.WindowsShutDown
       || e.CloseReason == CloseReason.ApplicationExitCall) 
       return;

这会让您使用 Application.Exit() 在处理程序中正确关闭。或者,您可以直接关闭主(隐藏)表单。

关于c# - 关闭主窗体隐藏的 winforms 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20749503/

相关文章:

c# - 在不添加引用的情况下调用另一个项目的类

c# - NHibernate 在 PostgreSQL 9.0 中不断丢失我的 DateTime 的时区

c# - Winforms Devexpress 应用部署

C# Winforms DatagridView - 为不同的行设置不同的按钮颜色

visual-studio - 如何全局设置 Visual Studio 项目的起始 URL?

c# - 如何使用 MySqlParameter 有条件地将列设置为其默认值?

c# - 为什么具有 STAThreadAttribute 的线程不支持 WaitAll 方法?

c# - 如何从C#的最后一行到第一行读取文本文件

asp.net-mvc - Visual Studio 不更新 Internet 临时文件

visual-studio - 如何在 Visual Studio 中将构建配置更改为发布?