2014-03-06 2 views
0

저는 C# 및 WPF에서 간단한 것을 프로그래밍하고 있습니다. MainWindow에 버튼이 있습니다. 버튼을 트리거하면 두 번째 창이 열립니다.WPF - C# - 열린 부모 창 한 번만

private void btnF4_Click(object sender, RoutedEventArgs e) 
{ 
    SecondWindow second = new SecondWindow(); 
    second.Show(); 
} 

당연히 버튼을 3 ~ 4 번 트리거하면 3 ~ 4 개의 창이 열립니다. ShowDialog()를 사용하고 싶지 않지만 두 번째 창을 한 번만 열려고합니다. 내가 버튼을 트리거하고 창문이 이미 열려 있다면 아무 일도 일어나지 않을 것입니다.

감사합니다.

답변

1

부모 창 클래스에 second을 인스턴스 변수로 지정하고 만들어지지 않은 경우 새 창만 만듭니다.

물론 두 번째 창이 닫히면 null 인스턴스 변수를 확인해야합니다.

public class ParentWindow ... 
{ 
    private SecondWindow m_secondWindow = null; 

    .... 

    private void btnF4_Click(object sender, RoutedEventArgs e) 
    { 
     if (m_secondWindow == null) 
     { 
      m_secondWindow = new SecondWindow(); 
      m_secondWindow.Closed += SecondWindowClosed; 
      m_secondWindow.Show(); 
     } 
    } 


    public void SecondWindowClosed(object sender, System.EventArgs e) 
    { 
     m_secondWindow = null; 
    } 
}  

은 다음 단축 될 수 있습니다

public class ParentWindow ... 
{ 
    private SecondWindow m_secondWindow = null; 

    .... 

    private void btnF4_Click(object sender, RoutedEventArgs e) 
    { 
     if (m_secondWindow == null) 
     { 
      m_secondWindow = new SecondWindow(); 
     } 

     m_secondWindow.Show();    
    } 
}  

그러나, 나는 당신이 실제로 전에 닫힌 창을 "재개"할 수 있는지 여부를 확인 결코 해요. 다시 열 때마다 창을 초기화해야하는 경우 첫 번째 코드를 사용하십시오. 이전 내용을 보여주기 시작한 창에서 살 수 있다면 두 번째 창을 사용하십시오.

+0

Thorsten. 당신 말이 맞아요, 전에 폐쇄 된 두 번째 창을 다시 열 수 있습니다. 어쩌면 내가 null로 개체 참조를 다시 설정해야합니다. – user3283415

+0

완벽하게 작동합니다. 고마워요! – user3283415

+0

@ user3283415 : 도움이 되었으면 대답을 수락하십시오. –