从C#中的列表中删除已关闭的表单

时间:2014-05-14 15:50:21

标签: c# winforms list

所以,我有一个关于使用表单列表以及表单何时关闭的问题,要从C#中的列表中删除自己。我不认为垃圾收集器是自动执行的,对吧?

让我说我有:

List<SomeGraphForm> GraphGroup = new List<SomeGraphForm>();

....

添加表单...

GraphGroup.Add(x);

当x关闭时,从列表中删除它的最简洁方法是什么?使用FormClosed事件是最好的方式(但我不确定如何将SomeGraphForm项传递回其他类())。

2 个答案:

答案 0 :(得分:2)

是的,GC无法收集仍然提到的内容。我会采用这种基本方法:

  //code to create and add form
  var form = new Form1();
  form.FormClosed +=form_FormClosed;
  _forms.Add(form);
  form.Show();

  //cleanup
  private void form_FormClosed(object sender, FormClosedEventArgs e)
  {
        var closedForm = sender as Form1;
        _forms.Remove(closedForm);
  }

答案 1 :(得分:0)

如果您有一个用于从中派生所有表单的基类,则可以在OnClosed方法中取消注册。

protected override void OnClosed(EventArgs e)
{
    // unregister here
}