2010-07-13 71 views
1

我使用此方法根據它們的Id關閉窗體,但是如果我用Id 2打開窗體,關閉它一次,它工作正常,但如果我用Id 2再次打開窗體,它不會關閉窗體(表單只停留在屏幕上)。我不知道發生了什麼,急切需要幫助。謝謝!處置第二次不處理表單?

public void OutsideClose(long Id) 
{ 
    if (InvokeRequired) 
    { 
     Invoke(new Action<long>(OutsideClose), Id); 
    } 
    else 
    { 
     var FormToClose = ListForms.Find(a=> a.Id == Id); 
     if(FormToClose != null) 
     { 
      FormToClose.Dispose(); 
      OpenForms.Remove(Id); 
     } 
    } 
} 
+2

這看起來並不像有效的代碼更接近 - 你看起來就像你要移除* ID *,而不是形式 - 並且您在刪除呼叫後沒有分號。請提供一個簡短但完整的程序來說明問題 - 然後幫助您更容易。 – 2010-07-13 13:29:42

+0

添加了分號,對不起轉錄抱歉,我也編輯了代碼,因爲你再次合適,實際上有2個列表,ListForms包含表單,OpenForms包含Id的 – sooprise 2010-07-13 13:31:57

+0

嘿,你基本上問過同樣的問題:http: //stackoverflow.com/questions/3233008/invoking-something-twice-leads-to-protected-override-void-dispose – 2010-07-13 14:35:42

回答

1

好的,我很笨! 我正在處理表單,但我並沒有從列表中刪除它。現在我添加了一行代碼來做到這一點,現在它已經修復了。

編輯:感謝喬恩讓我看看代碼(尤其是兩個列表)