2010-07-23 69 views
4

這裏有一些上下文...我有一個System.Windows.Window用於顯示模態消息框。我創建了一個Show()方法來初始化窗口的內容,然後調用ShowDialog()。用戶單擊此窗口上的一個按鈕,有關點擊按鈕的一些信息在Tag屬性中設置,然後窗口通過Close()關閉。是否可以重新顯示並關閉對話窗口?

正如所料,當試圖在窗口關閉後調用ShowDialog()時,會出現ShowDialog異常。有沒有什麼方法可以重複使用同一個Window實例,以便每次我需要消息框時不需要新建一個實例?

例如...

MessageBoxWindow mbw = new MessageBoxWindow(); 
result = mbw.Show("caption", "message 1"); 

mbw.Show("caption", "message 2"); 
// The above throws an exception, so I have to do this... 
mbw = new MessageBoxWindow(); 
result = mbw.Show("caption", "message 2"); 

任何幫助將不勝感激!

回答

2

使用.Hide()代替.Close()。這不會破壞它。然後你可以在需要時再次調用Show()。

MainWindow test = new MainWindow(); 
    test.Show(); 
    test.Hide(); 
    test.Show(); 
+0

謝謝!非常簡單的解決方案,適用於我需要解決的問題。 – geoffmazeroff 2010-07-25 17:08:51

0

您可以添加一個FormClosing事件來取消窗體關閉,而是將Form.Visible設置爲false。那麼你還需要Show方法來檢查這個Form是否爲null,所以你會知道你是否需要創建一個新的Form或者只顯示一個你已經擁有的Form。

例如:

private void FormMessageBox_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    //This stops the form from being disposed 
    e.Cancel = true; 
    this.Visible = false; 
} 

public static void Show(FormMessageBox formMessageBox, string message) 
{ 
    //if formMessageBox is null we need to create a new one otherwise reuse. 
    if (formMessageBox == null) 
    { 
    formMessageBox = new FormMessageBox(message); 
    formMessageBox.ShowDialog(); 
    } 
    else 
    { 
    formMessageBox.lblMessage.Text = message; 
    formMessageBox.Visible = true; 
    } 
} 
+0

這個解決方案可能是使用與窗口有關的事件來解決問題的最完整的方法,而不是使用Visible,您可以使用此方法的Hide()和Show()方法以及Jay的答案中提出的 – Jack 2010-07-23 14:14:19

+0

。不幸的是,我的團隊負責人說消息框與我們的Io​​C兼容,因此靜態方法往往是有問題的。如果IoC不在圖片中,我會使用這個解決方案。謝謝! – geoffmazeroff 2010-07-25 17:13:18

+0

如果它只是靜態方法(而不是事件處理程序),那麼show方法不一定是靜態的。我只是把它變成靜態的,因爲我寫它的方式允許它是靜態的。我猜想習慣的力量。 – Jack 2010-07-26 04:04:44

相關問題