【问题标题】:Detect when user presses the red X in toolbar (top right)检测用户何时按下工具栏中的红色 X(右上角)
【发布时间】:2012-01-14 12:41:27
【问题描述】:

在我为测试/学习 C# 编写的应用程序中,我使用 hidden/visible 属性来打开和关闭窗口。 它是一个 WPF 应用程序。

在主窗口中,我有一个触发此方法的“关闭”按钮:

public void buttonQuit_Click(object sender, RoutedEventArgs e)
{
    var message = exitmessage;
    var title = exitTitle;
    var result = MessageBox.Show(
        message,                    // the message to show
        title,                      // the title for the dialog box
        MessageBoxButton.YesNo,     // show two buttons: Yes and No
        MessageBoxImage.Question);  // show a question mark icon

    // lets see what has been pressed
    switch (result)
    {

        case System.Windows.MessageBoxResult.Yes:   // Yes button pressed
            CloseAllWindows();
            break;

        case System.Windows.MessageBoxResult.No:    // No button pressed
            break;

        default:                 // Neither Yes nor No pressed (just in case)
            MessageBox.Show("Oh noes! What did you press?!?!");
            break;
    }
}

这样我可以确保所有窗口都关闭,包括隐藏的窗口。 但现在是关键;当用户按下(在主窗口中)工具栏中右上角的红色 X 关闭时,只有该主窗口被关闭,但在后台隐藏的窗口仍然存在。

所以其实是2个问题:

  1. CloseAllWindows(); 真的足以让应用 100% 关闭吗?

  2. 当用户按下工具栏中的那个红色 X 时,我如何“捕捉”该事件,并使其也触发正确的关闭事件?

【问题讨论】:

    标签: c# wpf toolbar


    【解决方案1】:

    您应该为您的窗口处理ClosingClosed 事件。前者允许您取消关闭,而后者只允许您执行必要的清理以响应关闭的窗口。

    因此,在这种情况下,您应该将 buttonQuit_Click 方法中的代码放入附加到 Closing 事件的处理程序方法中,以便无论窗口如何关闭都会触发它。

    然后,您的buttonQuit_Click 方法可以简单地调用窗口的Close method。这将关闭窗口,进而引发Closing 事件,并在附加的处理程序方法中运行您的代码。

    至于您的其他问题,CloseAllWindows 将完全按照它所说的去做:它将关闭您的应用程序打开的所有窗口。在大多数情况下,应该足以关闭应用程序,但可能不是,特别是如果您创建了非后台线程或取决于ShutdownMode 设置。

    App.Current.Shutdown 将无条件工作。

    【讨论】:

    • 我对 c# 的了解还不是很深(现在才 2 周,呵呵),那么将方法放入处理程序到底是什么意思?
    • handler 指的是事件处理程序。Closing 或 Closed 是事件委托,您需要添加方法委托来处理事件。我认为这是查看有关事件的文档的最佳时间MSDNmsdn.microsoft.com/en-us/library/awbftdfh.aspx
    • @Dante:阅读事件处理。您通过将处理程序方法(就像常规方法,但具有特殊签名)附加到该事件来处理事件。每当引发事件时,都会调用您的处理程序方法。
    【解决方案2】:

    您可以为此使用窗口的关闭事件。

    更多信息 http://msdn.microsoft.com/en-us/library/system.windows.window.closing.aspx

    【讨论】:

    • 啊哈,现在开始变得更有意义了。谢谢你的链接。
    猜你喜欢
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    相关资源
    最近更新 更多