2015-09-06 87 views
2

我創建了一個窗口,只有在其外部單擊時才能關閉該窗口。代碼工作得非常好位置:System.InvalidOperationException:無法設置可見性

protected override void OnDeactivated(EventArgs e) 
{ 
    try 
    { 
     base.OnDeactivated(e); 
     Close(); 
    } 
    catch (Exception ex) { Console.WriteLine(ex.ToString()); } 
} 

在關閉窗口,例如,用alt + f4唯一的問題就來了,尤其需要此異常:

你不能設置能見度爲Visible或者調用Show,ShowDialog,關閉WindowInteropHelper.EnsureHandle或當你關閉窗口時。

我該如何確保避免它?其實我已經成功使用的try/catch異常..

回答

2

窗口的Deactivated事件引發之前,Closing事件發生(但很明顯,只有當窗口被用戶故意關閉,例如通過按下Alt+F4 )。這意味着你可以設置窗口的Closing事件處理一個標誌,指示當前正在關閉的窗口,這意味着Close()方法不需要在Deactivated事件處理函數中調用:

private bool _isClosing; 

    protected override void OnClosing(CancelEventArgs e) 
    { 
     base.OnClosing(e); 
     _isClosing = true; 
    } 

    protected override void OnDeactivated(EventArgs e) 
    { 
     base.OnDeactivated(e); 
     if (!_isClosing) 
      Close(); 
    } 
+0

好的解決方案,謝謝:d – Bender