从窗体中动态删除控件

Dynamically Removing controls from a form

我使用的表单具有根据所使用对象的 class 动态添加的控件。 为了将下一个对象加载到表单中,有必要删除并重建动态部分。 使用下面的代码删除对象时出现随机结果,你能告诉我我的错误可能在哪里吗?

Sub CntrlKill(KillName As String)
    For Each c In Me.Controls
        If Strings.InStr(c.name, KillName) > 0 Then
            Me.Controls.Remove(c)
        End If
    Next
End Sub

将 GSerg 提供的第二个 link 翻译成 vb.net。

创建一个列表来保存要删除的控件。您可以遍历所有控件并将某些控件添加到列表中。这不会影响 Controls 集合。我已经很久没有看到 InStr 被使用了。 .net .Contains 可能会满足您的需要。

第二个循环遍历lstToDelete。从控件集合中删除控件不会影响此列表。

For Each 循环的规则是不影响您正在循环的集合。您可以更改集合中项目的属性。只是不要删除任何项目。

Sub CntrlKill(KillName As String)
    Dim lstToDelete As New List(Of Control)
    For Each c As Control In Controls
        If c.Name.Contains(KillName) Then
            lstToDelete.Add(c)
        End If
    Next
    For Each c In lstToDelete
        c.Dispose()
    Next
End Sub

或者反向循环方式。

Private Sub NukeControls(KillString As String)
    For i = Controls.Count - 1 To 0 Step -1
        If Controls(i).Name.Contains(KillString) Then
            Controls(i).Dispose()
        End If
    Next
End Sub