2014-03-06 105 views
0

我在C#和WPF中編寫了一個簡單的東西。我有一個帶有按鈕的MainWindow。如果我觸發按鈕,它會打開一個窗口塞康:WPF - C# - 只打開父窗口一次

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

當然,如果我觸發按鈕三分四次,我有三個或四個窗口打開。我不想使用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:如果有幫助,請接受答案。 –