【问题标题】:delete a form instance from a list(of form)从(表单)列表中删除表单实例
【发布时间】:2013-12-10 08:38:04
【问题描述】:

Dim fList As New List(Of Form)

每次我击中标记..

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

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

但是,如果我关闭该特定实例.. 它会保留在 fList 上,并且每当我遇到某个从列表中调出所有内容的事件时,就会出现所谓的 已关闭 表单..

这是我的程序流程:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    如果你还有对表单对象的引用:

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

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

    如果你知道表单在 List 中的索引:

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

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

    如果你想通过文本删除,你可以使用第一种方法来做这样的事情:

    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")
    

    【讨论】:

    • 这行得通吗? fList.Remove(f.text=some variable) 如果是,我应该把它放在哪里? - 在表单实例上单击 X 后,我需要将其删除..
    • 不,这是行不通的,如果您查看我喜欢的文档,则没有接受布尔参数的方法。有关如何执行此操作,请参阅我的更新答案。
    • 我没有为列表中的元素提供名称和 ID,我是新手,但这可能会起作用。我需要先学习。谢谢。但我正在查看fList.Clear() 并且仅将当前Visible 表单添加到列表中,以便那些将被拉出的表单。那会有好处吗?另外,我无法预见我应该把代码放在哪里,所以当我关闭实例时它会触发..:/
    【解决方案2】:

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

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

    Public fList As New List(Of Form)
    

    然后将此代码添加到Form2:

    Form1.fList.Remove(Me)
    

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

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

    【讨论】:

    • 这只是使用我在答案中发布的第一个选项,因为您将对特定表单实例的引用传递给 remove 方法
    • 我认为第一个选项可以添加到代码中。但由于我的名单没有名字,那将删除我不知道是哪一个。大声笑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2023-04-03
    • 2014-03-20
    • 2018-11-09
    相关资源
    最近更新 更多