我有一个VB.Net WinForm程序。 我用控件动态创建面板。 每个小组都有: 2个标签 1 DataGridView 1个按钮 我第一次创建面板时一切正常。 一切都得到了创造,一切都在发挥作用。
如果我必须重新创建表单,我会使用以下代码删除现有面板(及其控件):
For P = 0 To Panels.Count - 1
For Each PControl In Panels(P).controls
Panels(P).controls.remove(PControl)
Next
Me.Controls.Remove(Panels(P))
Next
Panels.Clear()
DataGrids.Clear()
lblCounts.Clear()
其中: Panels,DataGrids,& lblCounts是包含控件的ArrayLists
当我重新创建面板时,我得到面板和除按钮之外的所有控件 当我单步执行调试器时,我看到按钮被删除,我看到它们正在创建,但它们没有出现在面板中 有什么想法吗?
答案 0 :(得分:1)
您的问题是关于添加控件时没有显示按钮,但您只显示删除过程,这是有缺陷的。
创建一个包含标签,网格和按钮的UserControl。将其添加到您的表单。这就是UserControls的用途。
此外,完成使用后,只需致电:
MyControl.Dispose()
否则,我怀疑你是在泄漏记忆。删除不会破坏对象。
答案 1 :(得分:0)
For Each PControl In Panels(P).controls
Panels(P).controls.remove(PControl)
Next
这部分可能会让您退出代码。 “For Each”在执行期间其项目发生变化时不喜欢它。用断点检查它。如果真的是一个问题,你可以做..
懒惰方法,只需添加.ToList
即可For Each PControl In Panels(P).controls.ToList
Panels(P).controls.remove(PControl)
Next
类似于:
Dim AllControls as New List(Of control)
AllControls.AddRange(Panels(P).controls)
For Each PControl in AllControls
Panels(P).controls.remove(PControl)
Next
或:
For i as integer = Panels(P).controls.count -1 to 0 step -1
Dim PControl as control = Panels(P).controls(i)
PControl.parent.remove(PControl)
Next
答案 2 :(得分:0)
试试这个
WHILE Panels(P).controls.count > 0
Panels(P).controls.removeAt(1)