2012-03-22 156 views
0

當我想在我的代碼中使用多個窗口,我通常不喜歡這樣:表格封閉/處理的方式是什麼?

Window w = new MainWindow(); 
w.Show();    
this.Close(); 

但今天,我發現我可以這樣做:

Window w = new MainWindow(); 
this.Close(); 
w.Show();    

我有點驚訝,所以我想知道this.Close究竟做了什麼?然而,從documentation,它說,如果最後一個窗口剛關閉,應用程序將停止運行(關閉),那麼如何呢?

但是,這並不是而是在WinForms中只能工作在WPF中。

+0

WPF有窗口,頁面和用戶控件,但沒有形成。 – Paparazzi 2012-03-22 19:10:01

+0

我不明白你想說什麼? – 2012-03-22 19:15:38

+0

什麼是命名空間? – Paparazzi 2012-03-22 19:53:48

回答

1

關閉窗口會導致它擁有的任何窗口關閉。此外,關閉窗口可能會導致應用程序停止運行,具體取決於如何設置Application.ShutdownMode屬性。

它的默認值是OnLastWindowClose這意味着應用程序僅在關閉上次創建的窗口後關閉。在你的例子中的this.Close()點,你已經有2個窗口(不管窗口是打開還是隱藏)。

您可以在WPF源代碼中看到它,Window的構造函數將新創建的窗口添加到Application.Windows集合中。而Window.Close()方法執行以下代碼:您退出後 1顯示的新窗口 2.關閉當前窗口 由於實際渲染髮生反正:

if (((App.Windows.Count == 0) 
    && (App.ShutdownMode == ShutdownMode.OnLastWindowClose)) 
    || ((App.MainWindow == this) 
    && (App.ShutdownMode == ShutdownMode.OnMainWindowClose))) 
{ 
    App.CriticalShutdown(0); 
} 
+0

謝謝,你可以,但**最後創建的窗口**以粗體顯示。這是有道理的,我想知道爲什麼這個變化是在WPF中做出的? – 2012-03-22 19:34:08

+0

雖然我仍然在想,但如果我刪除w.Show()程序結束,那麼爲什麼如果它仍然不應該關閉時,仍然有一個創建的窗口? – 2012-03-22 23:56:39

+0

@ChibuezeOpata你確定程序實際上結束了嗎?如果你刪除'w.Show()'程序只停留在沒有任何打開窗體的進程中。我剛剛測試過,它是如此。 – oxilumin 2012-03-23 12:52:56

0

基本上,你只是改變順序你的代碼 - 應該沒有區別。無論#1和#2的順序如何,您都永遠不會出現在窗口之外(儘管隱藏,第二個窗口存在),所以應用程序不會關閉。

請考慮下面的代碼。雖然Show在第一個窗口關閉3秒後發生,但應用程序將不存在。一旦用戶點擊「旋轉」按鈕,第一個窗口將消失3秒鐘,並出現一個新窗口。

XAML:

<Button Click="Button_Click" Content="Rotate" Width="80" Height="50"/> 

代碼隱藏:

private void Button_Click(object sender, RoutedEventArgs e) { 
    MainWindow w = new MainWindow(); 
    this.Close(); 

    DispatcherTimer timer = new DispatcherTimer(); 
    timer.Interval = new TimeSpan(0, 0, 3); 
    timer.Tick += (o, a) => { 
     ((DispatcherTimer)o).Stop(); 
     w.Show(); 
    }; 

    timer.Start(); 
} 
+0

是的,但爲什麼如果沒有'w.Show()'它退出,但窗口仍然存在? – 2012-03-22 20:27:33

+0

@ChibuezeOpata - 它在那裏,只是隱藏。 UI元素不必是可見的才能存在。 「如果一棵樹落在森林裏,沒有人在附近聽它,它會發出聲音嗎?「也許不是,但是如果一個窗口存在並且沒有人能夠看到它 - definitly exists。 – Uri 2012-03-22 20:39:29

+0

你不是自相矛盾嗎? – 2012-03-22 23:54:31

相關問題