为什么this.close()关闭应用程序

时间:2013-04-24 14:48:19

标签: c# .net wpf winforms

我在wpf中有一个窗口,我希望在转义按钮上关闭窗口。所以我在PreviewKeyDown事件上编写了这个代码,但它关闭了整个应用程序,包括主窗口和当前窗口。我只想关闭当前窗口。

 //this code for open second window
 private void M_Mahale_Click(object sender, RoutedEventArgs e)
    {
        Tanzimat.MahaleWin Mahale = new Tanzimat.MahaleWin();
        Mahale.ShowDialog();
    }
  //this code for PreviewKeyDown event on second window and current window
 private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Escape)
        {
            this.Close();
        }
    }        

5 个答案:

答案 0 :(得分:6)

好的,基于此评论//this code for PreviewKeyDown event on second window and current window,您在PreviewKeyDown中的两个窗口中都有相同的代码,因此在两个窗口中都会将代码更改为:

private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Escape)
    {
        e.Handled = true;
        this.Close();
    }
}

这将阻止其他窗口在已经处理完事件时获取该事件。看看,当按下退出键时,两个窗口都收到消息,并且您没有告诉主窗口(即当前窗口后面的那个)不处理它,发生了什么。

答案 1 :(得分:1)

您的窗口名称为Mahale,或者要从主窗口关闭它,您应该致电:

 Mahale.Close();

如果您在主表单中调用this.Close();,程序退出

是很自然的

答案 2 :(得分:0)

您可以使用this.Hide()隐藏该窗口,但该窗口仍然存在。

答案 3 :(得分:0)

我认为实现目标的最佳方法是使用Button的IsCancel属性。

  

您可以将取消按钮上的IsCancel属性设置为true,   导致取消按钮自动关闭对话框   处理Click事件。

有关示例,请参阅here

答案 4 :(得分:-1)

做:

private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Escape)
    {
        this.Hide();
    }
}

代替。

关闭()关闭每一帧。使用hide()。