c#-检测用户何时按下工具栏上的红色X(右上角)

在为测试/学习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时,只有该主窗口被关闭,而在后台隐藏的窗口仍然存在.

因此,实际上有两个问题:

>是CloseAllWindows();真的足以使该应用程序100%关闭?
>当用户按下工具栏中的红色X时,如何“捕获”该事件并使其也触发正确的关闭事件?

解决方法:

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

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

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

至于您的其他问题,CloseAllWindows会完全按照其说的去做:它将关闭您的应用程序已打开的所有窗口.在大多数情况下,这足以关闭应用程序,但事实并非如此,尤其是如果您创建了非后台线程或取决于ShutdownMode设置.

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

上一篇:matlab PDE toolbar


下一篇:Android中导航栏之Toolbar的使用