WPF程序关闭并提示

时间:2016-04-10 16:39:30

标签: c# wpf xaml

当我按下Exit按钮时,我编写了这段代码来处理程序/窗口的关闭:

private void MIExit_Click(object sender, RoutedEventArgs e)
    {
        var close = MessageBox.Show("Do you want to close the programm?", "", MessageBoxButton.YesNo);
        if (close == MessageBoxResult.No)
            return;
        else
            Application.Current.Shutdown();
    }

问题是我必须两次按“是”才能关闭申请,我不明白为什么。

谢谢你, 菲利普

3 个答案:

答案 0 :(得分:1)

对不起......我知道为什么。我为" X"处理了这个问题。窗口右上方的符号:

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        var close = MessageBox.Show("Do you want to close the programm?", "", MessageBoxButton.YesNo);
        if (close == MessageBoxResult.No)
            e.Cancel = true;
        else
            e.Cancel = false;
    }

显然,messageBox出现了两次......

答案 1 :(得分:0)

您发布的代码没有问题。
可能你还有其他地方的错误。

我这样试过:
XAML:
<Button Click="MIExit_click">Exit</Button>

C#:

private void MIExit_click(object sender, RoutedEventArgs e)
{
    if (MessageBox.Show("close?", "", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
        Application.Current.Shutdown();
    else return;
}

工作正常。

答案 2 :(得分:0)

您是否可能订阅该活动两次?我会首先处理事件,因此它不会冒泡,然后添加一个简单的标记,以便MessageBox不会被调用两次。

private bool _shuttingDown;
private void MIExit_Click(object sender, RoutedEventArgs e)
{
    e.Handled = true;

    if (_shuttingDown) return;
    _shuttingDown = true;

    var close = MessageBox.Show("Do you want to close the programm?", "", MessageBoxButton.YesNo);
    if (close == MessageBoxResult.No) 
    {
        _shuttingDown = false;
        return;
    }

    Application.Current.Shutdown();     
}