从窗体中动态删除控件
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
我使用的表单具有根据所使用对象的 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