如何在关闭窗口之前仅显示一次消息框
本文关键字:一次 消息 显示 窗口 | 更新日期: 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;
}
}