2012-01-14 3 views
3

응용 프로그램 내에서 C#을 테스트/학습하기 위해 숨김/표시 속성을 사용하여 창을 열고 닫습니다. WPF 응용 프로그램입니다. 메인 창에서 사용자가 도구 모음의 빨간색 X를 누를 때 감지 (오른쪽 상단)

, 나는이 방법을 트리거하는 '닫기'버튼이 있습니다

public void buttonQuit_Click(object sender, RoutedEventArgs e) 
{ 
    var message = exitmessage; 
    var title = exitTitle; 
    var result = MessageBox.Show(
     message,     // the message to show 
     title,      // the title for the dialog box 
     MessageBoxButton.YesNo,  // show two buttons: Yes and No 
     MessageBoxImage.Question); // show a question mark icon 

    // lets see what has been pressed 
    switch (result) 
    { 

     case System.Windows.MessageBoxResult.Yes: // Yes button pressed 
      CloseAllWindows(); 
      break; 

     case System.Windows.MessageBoxResult.No: // No button pressed 
      break; 

     default:     // Neither Yes nor No pressed (just in case) 
      MessageBox.Show("Oh noes! What did you press?!?!"); 
      break; 
    } 
} 

나는 모든 창은 숨겨진 것들을 포함, 닫히지 있는지 확인이 방법. 하지만 이제는 잡을 수 있습니다. 사용자가 (메인 윈도우에서) 툴바에서 오른쪽 상단의 빨간색 X를 눌러 닫으면 해당 메인 윈도우 만 닫히지 만 백그라운드에서는 숨겨진 것들이 여전히 남아 있습니다.

  1. 은 100 % 폐쇄 응용 프로그램을 얻을 정말 충분한 CloseAllWindows();인가 :

    그래서 사실은이 개 질문입니까?

  2. 사용자가 툴바에서 빨간색 X를 눌렀을 때 어떻게 이벤트를 "catch"하고 오른쪽 종료 이벤트를 트리거 할 수 있습니까?

답변

2

당신은 당신의 창 (들)에 대한 Closing 또는 Closed 이벤트 중 하나를 처리해야한다. 전자는 을 취소 할 수 있습니다.은 닫히고, 후자는 닫히는 창에 대한 응답으로 필요한 정리를 수행 할 수 있습니다.

따라서이 경우에는 buttonQuit_Click 메서드의 코드를 Closing 이벤트에 첨부 된 처리기 메서드에 넣어야 윈도우가 닫히는 방식에 관계없이 트리거됩니다.

그러면 buttonQuit_Click 메서드는 단순히 창 Close method을 호출 할 수 있습니다. 그러면 창이 닫히고 Closing 이벤트가 발생하고 첨부 된 핸들러 메소드에서 코드가 실행됩니다.

다른 질문과 마찬가지로 CloseAllWindows은 애플리케이션이 실행 한 모든 창을 닫습니다. 대부분의 경우, 으로 충분해야 응용 프로그램을 종료 할 수 있지만 특히 배경색이 아닌 스레드를 만들었거나 ShutdownMode 설정에 따라 달라질 수 있습니다.

App.Current.Shutdown은 무조건 작동합니다.

+0

메신저 (단지 이주 이제 도니는 다르게) 그래서 당신은 핸들러로하는 방법을 퍼팅과 의미 정확히 무엇? – Dante1986

+0

그는 처리기를 의미합니다. Closing 또는 Closed는 이벤트 대리자이며 이벤트를 처리하기 위해 메서드 대리자를 추가해야합니다. MSDN http : // msdn의 이벤트에서이 문서를 확인하는 것이 가장 좋습니다. microsoft.com/en-us/library/awbftdfh.aspx –

+0

@ 단테 : 이벤트 처리시 읽으십시오. 해당 이벤트에 핸들러 메소드 (일반 메소드와 유사하지만 특수 서명이있는 핸들러 메소드)를 첨부하여 이벤트를 처리합니다. 이벤트가 발생할 때마다 핸들러 메서드가 호출됩니다. –

관련 문제