如何在关闭窗口之前仅显示消息框一次

时间:2014-12-02 03:38:34

标签: c# wpf window messagebox termination

我制作了一个独立的应用程序,为研究目的进行一些工程分析。这是为了显示图形显示结果在另一个窗口(我不知道它是什么正确的词。我称之为子窗口)链接到主窗口。为了提醒最终用户在关闭主窗口之前保存输入文件,我在后面添加了一个代码,如下所示:

    private void Window_Closing(object sender, CancelEventArgs e)
    {
        MessageBoxResult result = MessageBox.Show("Please Be Sure That Input & Output Files Are Saved.  Do You Want To Close This Program?", "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Warning);
        if (result == MessageBoxResult.Yes)
        {
            Application.Current.Shutdown();
        }
        else
        {
            e.Cancel = true;
        }
    } 

XAML代码是:

<Window x:Class="GMGen.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Icon="Icon1.ico"
Title="GMGen" WindowState="Maximized" Closing="Window_Closing" >
<DockPanel x:Name="RootWindow">
    <ContentControl Content="{Binding CurrentPage}" />
    <Grid >
    </Grid >
</DockPanel>

当我关闭主窗口而不打开任何显示图形的子窗口时,它工作正常。弹出通知窗口并单击“是”,然后程序终止。但是,如果我打开&amp;在关闭主窗口之前关闭子窗口,事情变得有些奇怪。弹出通知。单击是,程序未终止。相反,会弹出另一个通知。单击是,然后弹出另一个。这件事发生在我打开和关闭子窗口的大致相同的时间。即如果我打开和关闭子窗口四次,通知会出现四到五次。我不知道是什么原因引起了这个问题。我只想一次显示消息框。如果您有任何人都知道解决方案,请告诉我。我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

很有可能你在每个窗口都订阅了关闭事件,因为它会触发N次。

如果没有看到您的实际实施,很难说出解决问题的最佳选择。这是通过使用静态标志进行确认来处理它的一种方法。显示确认后,flag将阻止后续弹出。

private static bool _isConfirmed = false;
private void Window_Closing(object sender, CancelEventArgs e)
{

    if (!_isConfirmed)
    {
        MessageBoxResult result = MessageBox.Show("Please Be Sure That Input & Output Files Are Saved.  Do You Want To Close This Program?", "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Warning);
        if (result == MessageBoxResult.Yes)
        {
            Application.Current.Shutdown();
        }
        else
        {
            e.Cancel = true;
        }
        _isConfirmed = true;
    }
}