处置第二次不处理表单?

问题描述:

我使用此方法根据它们的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

好的,我很笨! 我正在处理表单,但我并没有从列表中删除它。现在我添加了一行代码来做到这一点,现在它已经修复了。

编辑:感谢乔恩让我看看代码(尤其是两个列表)