2011-05-02 3 views
6

내 WPF 응용 프로그램에서 때로는 작은 도우미 창을 만들어야하고 처음으로 창 인스턴스를 만들면됩니다.닫힌 후 WPF 창은 어떻게됩니까?

if (mesareaderThreadQueWin == null) 
{ 
    mesareaderThreadQueWin = new MesaReaderThreadQueWindow();  
} 

mesareaderThreadQueWin.Show(); 

이것은 지금까지 완벽하게 작동합니다. 그러나 창을 닫고 코드를 다시 호출하면 프로그램이 닫히고 창이 닫힌 후에 표시을 수행 할 수 없다는 메시지가 표시됩니다.

여기 정확히 무슨 일이 일어나고 있는지 궁금합니다. 이 창은 null이 아닙니다. 그렇지 않으면 코드가 새 인스턴스를 만들지 만, 이미 창을 보았 기 때문에 다시는 그렇게 할 수없는 것처럼 보입니다. 그래서 창문은 어떤 종류의 상태에 있어야합니다. 눈에 보이지는 않지만 읽을 수는 없습니다. null.

이 상태를 감지 할 수 있습니까? 거기에 다시 창을 닫지 않고 대신에이 창을 다시 사용하는 방법이 있습니까?

+2

대신 숨기기() 멤버를 사용할 수 있습니다, 그것은 당신의 다음 사용을 위해 인스턴스를 저장됩니다. –

답변

4

이 상태를 감지 할 수 있습니까?

지금까지 내가 아는 한,이 상태

그에게 전혀 창을 닫고 대신 숨기기를 사용하지 않는 다시 다른이 창을 다시 사용할 수있는 방법에 액세스 할 수있는 방법이 무엇입니까?

예, 대화 상자 창에서 Closing 이벤트를 처리하거나 OnClosing 방법 오버라이드 (override) :

protected override void OnClosing(CancelEventArgs e) 
{ 
    e.Cancel = true; 
    this.Hide(); 
} 
1

당신은 그것을 취소하고 창을 숨기려면 Closing 이벤트를 처리 할 수있는 :

window.Closing += delegate(object sender, CancelEventArgs e) 
{ 
    e.Cancel = true; 
    window.Hide(); 
}; 

이 닫히는 Window을 결코 보장하지 않으며 당신이 여러 번 Show()를 호출 할 수 있습니다.

위의 내용을 고려해 볼 때 불필요한 내용 일 수 있지만 Window이 (가) Closed 이벤트에 첨부하여 플래그를 설정하면 감지 할 수 있습니다. 즉, 자신의 isClosed 변수를 유지하십시오.

관련 문제