[使用VB.NET 2010 / Winforms]
注意:我的实际项目比下面发布的代码复杂/有用(下面的代码只是再现奇怪行为所需的最小测试用例)。
OK ...在设计器中,我将两个大小相等的大面板放在一个名为“ ContainerA”和“ ContainerB”的窗体上,以及一个按钮(Button1)。我在ContainerA内放置了5个小的彩色面板(分别命名为RedPanel,BluePanel,GreenPanel等)。
ContainerB内无任何内容。
单击Button1时,我想做的是将ContainerA中的全部5个彩色小面板动态地放入ContainerB中。简单吧?但是出于某些奇怪的原因,它只将其中三个面板放到ContainerB中!(并将剩下的2个面板留在ContainerA中!
这到底是怎么回事?这是我多年来在.NET中编写代码以来见过的最奇怪的事情之一!
这是我的按钮单击事件的代码...
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For Each ColorBlock As Panel In ContainerA.Controls
ContainerB.Controls.Add(ColorBlock)
Next
End Sub
有任何想法吗?在我的真实项目以及我上面发布的简单测试项目中,我都得到了相同的奇怪(意想不到的)行为,因此VB中发生了一些奇怪的事情。
希望有人能对此有所启发,这样我就可以不再将可怜的头撞在墙上,试图找出解决方案!:/
您正在从循环中的集合中删除控件,因此一旦删除了一半以上的控件,循环将退出。为了防止这种情况,请向后循环遍历控件:
For i As Integer = ContainerA.Controls.Count - 1 To 0 Step -1
Dim ColorBlock As Control = Panel1.Controls(i)
ContainerB.Controls.Add(ColorBlock)
Next
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句