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

本文关键字:一次 消息 显示 窗口 | 更新日期: 2023-09-27 18:32:39

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

    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>

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

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

很可能您正在订阅每个窗口上的关闭事件,因为它触发了 N 次。

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

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