2012-06-27 196 views
2

我正在使用一個窗口來更改我的應用程序的數據庫配置。設置按鈕點擊由Config()處理,點擊時顯示設置窗口。如果我關閉了窗口右上角的交叉符號,我無法重用它在異常之後顯示的窗口。關閉後無法重用wpf窗口

在窗口關閉後,無法設置可見性或調用Show,ShowDialog或WindowInteropHelper.EnsureHandle。

ConfigDialogBox configDlg = new ConfigDialogBox(); 

     private void SettingsChanged(object sender, RoutedEventArgs e) 
     { 
      Database.host = configDlg.host; 
      Database.port = configDlg.port; 
      Database.user = configDlg.user; 
      Database.password = configDlg.password; 
      Database.database = configDlg.database;    
      ConfigDlg.Visibility = Visibility.Hidden; 
     } 

     private void Config(object sender, RoutedEventArgs e) 
     {    
      configDlg.Show(); 
      configDlg.okButton.Click+=new RoutedEventHandler(SettingsChanged); 
      configDlg.cancelButton.Click+=new RoutedEventHandler(SettingsChanged); 
     } 

     void cancel_Click(object sender, RoutedEventArgs e) 
     {   
      ConfigDlg.Visibility = Visibility.Hidden; 
     } 

我怎樣才能重新使用它關閉後?

+0

爲什麼你需要重新使用它,難道你不能創建一個新的? – tehlexx

+0

此窗口包含數據庫配置,如果窗口關閉,我將丟失所有設置。它正常工作正常,並取消,只關閉導致問題。 – user913359

回答

2

您無法重新使用該窗口。

如果通過比 OK以外的東西在關閉窗口取消按鈕是你的問題,你需要處理Window.Closing事件(見鏈接的例子)。

0

你不能。只需創建一個新窗口。

+0

實際上,如果窗口關閉,所有設置都將丟失,這是不需要的。 – user913359

+0

我認爲你建議的改變是增加configDlg = new ConfigDialogBox();在configDlg.show之前,它不能解決我的問題。 – user913359

+0

不要將設置存儲在ConfigDialogBox實例中。用'OK'按鈕關閉對話框時,將它保存到別處。 – Dennis

0
ConfigDialogBox configDlg = null; 



private void Config(object sender, RoutedEventArgs e) 
     {    
     configDlg = new ConfigDialogBox(); 
      configDlg.Show(); 
      configDlg.okButton.Click+=new RoutedEventHandler(SettingsChanged); 
      configDlg.cancelButton.Click+=new RoutedEventHandler(SettingsChanged); 
     } 
+2

或者你可以使用e.Cancel = true來取消onclosing事件; – JohnnBlade

+0

也看這裏,因爲你需要一個持久的方式來存儲年設置http://stackoverflow.com/questions/453161/best-practice-to-save-application-settings-in-a-windows-application – JohnnBlade