从列表(表单)中删除表单实例

时间:2013-12-10 08:38:05

标签: .net vb.net winforms generic-list

Dim fList As New List(Of Form)

每次我打标记..

Dim f As New Form2
Me.AddOwnedForm(f)
fList.Add(f)
f.Show()

我创建了一个实例并将其添加到fList ..

但是,如果我关闭该特定实例..它会停留在fList,每当我点击从列表中调出所有内容的某个事件时,就会显示所谓的已关闭形式。

这是我的程序流程:

点击标记 - >显示表格,添加到列表中 拖动地图 - >隐藏表格
mouseLeave - >显示隐藏的形式
但是当我手动关闭表单时,当我 Drag和MouseLeave 时,它再次出现。

问题是:如果关闭它,如何将添加的实例删除到fList

只有通过单击标记再次打开它才会出现。希望你明白我的意思。谢谢!

2 个答案:

答案 0 :(得分:2)

如果您仍然有对表单对象的引用:

fList.Remove(f) 'f is a reference to a form object

文档:http://msdn.microsoft.com/en-us/library/cd666k3e(v=vs.110).aspx

如果您知道列表中表单的索引:

fList.RemoveAt(index) 'removes the item at position of index

文档:http://msdn.microsoft.com/en-us/library/5cw9x18z(v=vs.110).aspx

如果要通过Text删除,可以使用第一种方法执行以下操作:

For Each f as Form in fList
    If f.Text = "foo" Then fList.Remove(f)
    Exit For
Next

或使用Linq:

fList.RemoveAll(Function(x) x.Text = "foo")

答案 1 :(得分:0)

Matt Miko的回答应该是最合适的,但我无法将其应用于我创建列表的方式。无论如何,我解决了这个问题。

因为我需要删除fList中已关闭的表单元素..

Public fList As New List(Of Form)

然后在Form2中添加了此代码:

Form1.fList.Remove(Me)

不知道这是可能的,但它对我有用。

如果您可以逻辑地看到它,如果我在表单上点击X,它将从列表中删除那个表单。这样我的程序只会显示所选的表格。 :)